@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
|
@@ -8,15 +8,14 @@ Read [configuration](configuration.md) first for discovery and precedence. In th
|
|
|
8
8
|
|
|
9
9
|
These are defaults built into this Tau version, not a dump of the effective configuration:
|
|
10
10
|
|
|
11
|
-
| Behavior
|
|
12
|
-
|
|
|
13
|
-
| Default persona
|
|
14
|
-
| Default TUI theme
|
|
15
|
-
| Built-in personas
|
|
16
|
-
|
|
|
17
|
-
|
|
|
18
|
-
|
|
|
19
|
-
| Command client tool timeout when unset | `60000` ms |
|
|
11
|
+
| Behavior | Shipped default |
|
|
12
|
+
| -------------------------------------- | -------------------- |
|
|
13
|
+
| Default persona | `sonnet-5.5-coder` |
|
|
14
|
+
| Default TUI theme | `gold` |
|
|
15
|
+
| Built-in personas | Enabled |
|
|
16
|
+
| Speech-to-text provider when unset | `openai` |
|
|
17
|
+
| Built-in diff tool code theme | `github-dark-dimmed` |
|
|
18
|
+
| Command client tool timeout when unset | `60000` ms |
|
|
20
19
|
|
|
21
20
|
Project and global content can change which persona ids are available. A configured default must match an available persona or built-in theme; otherwise Tau reports a warning.
|
|
22
21
|
|
|
@@ -26,20 +25,17 @@ Project and global content can change which persona ids are available. A configu
|
|
|
26
25
|
| --- | --- | --- | --- | --- |
|
|
27
26
|
| `apiKeys` | Object of string values | Global, project | Merge by provider id | Host or feature consumer; `/reload` for session runtime keys, process restart for environment changes |
|
|
28
27
|
| `defaultPersona` | Non-empty string | Global, project | Most-specific wins | Session host; new session |
|
|
29
|
-
| `
|
|
30
|
-
| `speech` | Object with optional `voiceId` | Global, project | Merge by field | TUI client or Telegram runner; process restart |
|
|
28
|
+
| `speech` | Object with optional `voiceId` and `recordingShortcut` | Global, project | Merge by field | TUI client or Telegram runner; process restart |
|
|
31
29
|
| `defaultTheme` | Non-empty string | Global, project | Most-specific wins | TUI client; client restart |
|
|
32
|
-
| `diffTool` | Object | Global, project | Most-specific complete object | TUI client; client restart |
|
|
33
|
-
| `builtInDiffTool` | Object | Global, project | Most-specific complete object | TUI client; client restart |
|
|
34
30
|
| `clientTools` | Array of objects | Global only | One global definition list | Owning client; TUI restart or new Telegram session client |
|
|
35
31
|
| `enabledClientTools` | String array | Project only | Most-specific project list | Owning client; TUI restart or new Telegram session client |
|
|
36
32
|
| `agentContextFiles` | String array | Global, project | Additive, resolved and deduplicated | Execution environment and session host; `/reload` or new session |
|
|
37
33
|
| `subagents` | Object | Global, project | Field-wise, currently one selectable list | Session runtime; `/reload` or new session |
|
|
38
|
-
| `autoCompact` | Object | Global, project | Merge by field over shipped defaults | Session runtime; `/reload` or new session |
|
|
39
34
|
| `modelSystemNotices` | String map | Global, project | Merge by model target | Session runtime; `/reload`, affects later inputs |
|
|
40
35
|
| `flySprites` | Object | Global, project | Merge APIs by id | Host startup; host restart |
|
|
41
36
|
| `nook` | Object | Global, project | Most-specific complete object | Host tool runtime; `/reload` or new session |
|
|
42
37
|
| `history` | Object | Global only | One global object | Host startup; host restart |
|
|
38
|
+
| `mcpServers` | Object keyed by server name | Global and project | Merge names; nearer entry replaces | Host startup; host restart |
|
|
43
39
|
|
|
44
40
|
Unknown fields are stripped without warnings. Wrong types and invalid known values produce warnings, and Tau continues with valid fields. A field at a forbidden scope is rejected.
|
|
45
41
|
|
|
@@ -59,18 +55,6 @@ Allowed reasoning suffixes are `none`, `minimal`, `low`, `medium`, `high`, `xhig
|
|
|
59
55
|
|
|
60
56
|
`defaultPersona` selects a new session when no CLI or session-creation override is supplied. Reloading an existing session retains its current persona id when possible. See [personas](personas.md).
|
|
61
57
|
|
|
62
|
-
### `disableBuiltinPersonas`
|
|
63
|
-
|
|
64
|
-
A boolean that removes shipped personas from the loaded persona catalog:
|
|
65
|
-
|
|
66
|
-
```json
|
|
67
|
-
{
|
|
68
|
-
"disableBuiltinPersonas": true
|
|
69
|
-
}
|
|
70
|
-
```
|
|
71
|
-
|
|
72
|
-
The default is `false`. When enabled, at least one valid custom persona must be available or session startup fails. This field does not disable user or project personas.
|
|
73
|
-
|
|
74
58
|
### `agentContextFiles`
|
|
75
59
|
|
|
76
60
|
An array of non-empty paths to additional text files included as project context:
|
|
@@ -89,16 +73,16 @@ The startup flag `--no-agent-context-files` disables context injection independe
|
|
|
89
73
|
|
|
90
74
|
The top-level subagent configuration currently accepts one optional field:
|
|
91
75
|
|
|
92
|
-
| Nested field
|
|
93
|
-
|
|
|
94
|
-
| `
|
|
76
|
+
| Nested field | Type | Contract |
|
|
77
|
+
| -------------- | ------------ | -------------------------------------------- |
|
|
78
|
+
| `launchModels` | String array | Allowlist for launch overrides for subagents |
|
|
95
79
|
|
|
96
80
|
Each entry must use `<provider>/<model>:<effort>` and resolve against the merged model catalog:
|
|
97
81
|
|
|
98
82
|
```json
|
|
99
83
|
{
|
|
100
84
|
"subagents": {
|
|
101
|
-
"
|
|
85
|
+
"launchModels": [
|
|
102
86
|
"openai-codex/gpt-6.1-sol:high",
|
|
103
87
|
"anthropic/claude-haiku-4-5:low"
|
|
104
88
|
]
|
|
@@ -106,29 +90,7 @@ Each entry must use `<provider>/<model>:<effort>` and resolve against the merged
|
|
|
106
90
|
}
|
|
107
91
|
```
|
|
108
92
|
|
|
109
|
-
A more-specific list replaces the broader list.
|
|
110
|
-
|
|
111
|
-
### `autoCompact`
|
|
112
|
-
|
|
113
|
-
Automatic compaction settings:
|
|
114
|
-
|
|
115
|
-
| Nested field | Type | Default | Meaning |
|
|
116
|
-
| --- | --- | --- | --- |
|
|
117
|
-
| `enabled` | Boolean | `true` | Whether Tau checks and compacts before model subturns |
|
|
118
|
-
| `reserveTokens` | Positive integer | `16384` | Context reserved below the model's context-window limit |
|
|
119
|
-
| `keepRecentTokens` | Positive integer | `20000` | Target budget for the recent retained tail |
|
|
120
|
-
|
|
121
|
-
Fields merge independently across levels:
|
|
122
|
-
|
|
123
|
-
```json
|
|
124
|
-
{
|
|
125
|
-
"autoCompact": {
|
|
126
|
-
"reserveTokens": 24000
|
|
127
|
-
}
|
|
128
|
-
}
|
|
129
|
-
```
|
|
130
|
-
|
|
131
|
-
The omitted fields retain their broader or shipped values. This setting changes Tau's automatic policy; manual `/compact-all` and `/compact-keep-last` remain available. See [sessions](sessions.md).
|
|
93
|
+
A more-specific list replaces the broader list. The worker’s instructions and tools are inherited from the main persona; custom worker definitions are not supported. See [subagents](subagents.md).
|
|
132
94
|
|
|
133
95
|
### `modelSystemNotices`
|
|
134
96
|
|
|
@@ -184,6 +146,18 @@ Controls `/speak` and Telegram `/tts_on` voice selection. Set `voiceId` to a non
|
|
|
184
146
|
}
|
|
185
147
|
```
|
|
186
148
|
|
|
149
|
+
For terminal recording, `recordingShortcut` replaces Ctrl+Y. Its required `key` is a single printable, non-whitespace character, `ctrl+y`, or `f1` through `f12`. Its required `gesture` is `press` or `double-tap`:
|
|
150
|
+
|
|
151
|
+
```json
|
|
152
|
+
{
|
|
153
|
+
"speech": {
|
|
154
|
+
"recordingShortcut": { "key": "§", "gesture": "double-tap" }
|
|
155
|
+
}
|
|
156
|
+
}
|
|
157
|
+
```
|
|
158
|
+
|
|
159
|
+
A double tap must arrive within 300 ms. For printable double-tap bindings, an unmatched first tap inserts the character after that delay; another key inserts it immediately before processing the new input. Single-press bindings reserve the character. Bracketed paste never triggers recording. Keyboard auto-repeat can count as repeated taps. Recording shortcuts apply only to the TUI, not Telegram.
|
|
160
|
+
|
|
187
161
|
Without an override, Tau looks up Maisie (`QtY3JBOUKEB5xzrRfOKc`) before synthesis and tries Caleb (`AaOhDHYJ1XLZk74lXhdE`) only if ElevenLabs reports that Maisie was not found. If neither is available, speech fails. A configured voice is used exclusively: an unavailable custom voice is an error, not a request to use a default.
|
|
188
162
|
|
|
189
163
|
Voice lookup authentication, permission, rate-limit, and network errors do not trigger fallback. Successful metadata lookup fixes the voice for the entire reply; it does not guarantee synthesis permission. Synthesis failures never switch voices or automatically retry a potentially billable request.
|
|
@@ -236,61 +210,53 @@ A global-only remote history target:
|
|
|
236
210
|
|
|
237
211
|
Credential precedence is `TAU_HISTORY_API_KEY`, then the variable named by `apiKeyEnv`, then `apiKey`. Configuring an endpoint without an available key prevents the host service from starting. Without `history`, transcript storage and queries remain machine-local. See [history](history.md).
|
|
238
212
|
|
|
239
|
-
|
|
213
|
+
### `mcpServers`
|
|
240
214
|
|
|
241
|
-
|
|
242
|
-
|
|
243
|
-
The exact, case-sensitive id of a built-in theme. The shipped default is `gold`:
|
|
215
|
+
MCP servers are resolved at host startup from the global `~/.config/tau/config.json` and ancestor/project `.tau/config.json` layers for the host's launch directory. Server names accumulate across layers; a nearer definition replaces the entire same-named entry, including credentials. Use `enabled: false` to disable an inherited server. All sessions on that host share the resolved definitions, and subagents inherit their parent's access even in another working directory. Session execution-environment configuration does not contribute servers. Restart the host after changing definitions or credentials; `/reload` does not reload servers.
|
|
244
216
|
|
|
245
217
|
```json
|
|
246
218
|
{
|
|
247
|
-
"
|
|
219
|
+
"mcpServers": {
|
|
220
|
+
"issues": {
|
|
221
|
+
"type": "stdio",
|
|
222
|
+
"command": "uvx",
|
|
223
|
+
"args": ["example-mcp-server"],
|
|
224
|
+
"env": { "API_TOKEN": "${ISSUES_TOKEN}" }
|
|
225
|
+
},
|
|
226
|
+
"remote": {
|
|
227
|
+
"type": "http",
|
|
228
|
+
"url": "https://example.com/mcp",
|
|
229
|
+
"headers": { "Authorization": "Bearer ${REMOTE_MCP_TOKEN}" }
|
|
230
|
+
}
|
|
231
|
+
}
|
|
248
232
|
}
|
|
249
233
|
```
|
|
250
234
|
|
|
251
|
-
|
|
235
|
+
Server names use letters, digits, `_`, and `-`. Every entry requires an explicit `type`:
|
|
252
236
|
|
|
253
|
-
|
|
237
|
+
- `stdio`: requires a non-empty `command`; accepts optional literal `args`, `cwd`, and string-valued `env`.
|
|
238
|
+
- `http`: requires an HTTP(S) `url` without embedded username/password; accepts optional string-valued `headers`. This is streamable HTTP, not the legacy SSE transport.
|
|
239
|
+
- Both accept `enabled` (default `true`), `timeoutMs` for tool calls and resource reads (integer from 1 to 900,000, default 300,000), and `discoveryTimeoutMs` for connection startup and discovery requests (integer from 1 to 60,000, default 30,000). The outer MCP code-mode program has a 15-minute deadline. All calls remain interruptible.
|
|
254
240
|
|
|
255
|
-
|
|
241
|
+
Stdio executables run directly without a shell. Bare commands resolve through the host's `PATH`. Commands containing `/` and relative `cwd` values resolve from the directory owning the defining config layer; `~/` resolves from host home. An omitted `cwd` defaults to the defining layer's directory. Arguments are literal: Tau does not interpolate them or expand shell syntax.
|
|
256
242
|
|
|
257
|
-
|
|
258
|
-
| --- | --- | --- | --- |
|
|
259
|
-
| `command` | Non-empty string | Yes | Executable name or path |
|
|
260
|
-
| `args` | String array | No | Arguments passed to the executable |
|
|
261
|
-
| `env` | Object of string values | No | Extra environment entries for the tool process |
|
|
243
|
+
Values in `env` and `headers` can reference host environment variables with `${NAME}`. Missing variables fail connection setup. Command substitution is not supported. Stdio servers inherit the host environment, with `env` overriding matching names. Keep secrets in the host environment rather than committing them to JSON.
|
|
262
244
|
|
|
263
|
-
|
|
264
|
-
{
|
|
265
|
-
"diffTool": {
|
|
266
|
-
"command": "./tools/review-ui",
|
|
267
|
-
"args": ["--browser", "firefox"],
|
|
268
|
-
"env": {
|
|
269
|
-
"REVIEW_LOG_LEVEL": "warn"
|
|
270
|
-
}
|
|
271
|
-
}
|
|
272
|
-
}
|
|
273
|
-
```
|
|
245
|
+
Invalid entries are skipped with diagnostics while valid siblings remain configured. OAuth sign-in, MCP prompts, subscriptions, elicitation, sampling, execution-environment servers, and user approval dialogs are not supported. See [tools](tools.md#mcp) for discovery, calls, and result handling.
|
|
274
246
|
|
|
275
|
-
|
|
247
|
+
## TUI presentation and diff review
|
|
276
248
|
|
|
277
|
-
### `
|
|
249
|
+
### `defaultTheme`
|
|
278
250
|
|
|
279
|
-
|
|
251
|
+
The exact, case-sensitive id of a built-in theme. The shipped default is `gold`:
|
|
280
252
|
|
|
281
253
|
```json
|
|
282
254
|
{
|
|
283
|
-
"
|
|
284
|
-
"codeTheme": "nord"
|
|
285
|
-
}
|
|
255
|
+
"defaultTheme": "azure"
|
|
286
256
|
}
|
|
287
257
|
```
|
|
288
258
|
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
`andromeeda`, `aurora-x`, `ayu-dark`, `ayu-mirage`, `catppuccin-frappe`, `catppuccin-macchiato`, `catppuccin-mocha`, `dark-plus`, `dracula`, `dracula-soft`, `everforest-dark`, `github-dark`, `github-dark-default`, `github-dark-dimmed`, `github-dark-high-contrast`, `gruvbox-dark-hard`, `gruvbox-dark-medium`, `gruvbox-dark-soft`, `horizon`, `horizon-bright`, `houston`, `kanagawa-dragon`, `kanagawa-wave`, `laserwave`, `material-theme`, `material-theme-darker`, `material-theme-ocean`, `material-theme-palenight`, `min-dark`, `monokai`, `night-owl`, `nord`, `one-dark-pro`, `plastic`, `poimandres`, `red`, `rose-pine`, `rose-pine-moon`, `slack-dark`, `solarized-dark`, `synthwave-84`, `tokyo-night`, `vesper`, `vitesse-black`, and `vitesse-dark`.
|
|
292
|
-
|
|
293
|
-
This object does not configure a custom `diffTool` process.
|
|
259
|
+
The attached TUI uses its client-local configuration. `/theme:<id>` changes the current client only and is not persisted into the session. See [TUI](tui.md).
|
|
294
260
|
|
|
295
261
|
## Command client tools
|
|
296
262
|
|
|
@@ -64,12 +64,10 @@ Within the project, the effective default persona is `gpt-6.1-sol-coder:high`.
|
|
|
64
64
|
A few fields intentionally use other rules:
|
|
65
65
|
|
|
66
66
|
- `apiKeys` merges by provider id. A more-specific key replaces only the same provider's value.
|
|
67
|
-
- `autoCompact` merges by field on top of shipped defaults.
|
|
68
67
|
- `modelSystemNotices` merges by normalized `<provider>/<model>` key.
|
|
69
68
|
- `flySprites.apis` merges by API id. A more-specific API replaces the complete API entry with that id.
|
|
70
69
|
- `agentContextFiles` is additive across levels, resolves each entry at its owning level, and removes duplicate resolved paths while preserving order.
|
|
71
|
-
- `
|
|
72
|
-
- `subagents.defaultLaunchModels` selects the most-specific list.
|
|
70
|
+
- `subagents.launchModels` selects the most-specific list.
|
|
73
71
|
- `clientTools` is defined only at global scope. `enabledClientTools` at the most-specific project level is an exact selection from those definitions.
|
|
74
72
|
- `history` is accepted only at global scope.
|
|
75
73
|
|
|
@@ -89,22 +87,18 @@ Relative path bases belong to the level that declares the value:
|
|
|
89
87
|
|
|
90
88
|
- Global `agentContextFiles` entries resolve from home.
|
|
91
89
|
- Project `agentContextFiles` entries resolve from the directory containing `.tau`.
|
|
92
|
-
- A relative `diffTool.command` containing a slash resolves from the same level root.
|
|
93
90
|
- A global `clientTools[].command` containing a slash resolves from home.
|
|
94
|
-
- A bare command such as `
|
|
91
|
+
- A bare command such as `git` is left bare and resolves through the owning process's `PATH`.
|
|
95
92
|
|
|
96
93
|
For example, in `/home/ada/work/ledger/.tau/config.json`:
|
|
97
94
|
|
|
98
95
|
```json
|
|
99
96
|
{
|
|
100
|
-
"agentContextFiles": ["docs/AI_GUIDE.md"]
|
|
101
|
-
"diffTool": {
|
|
102
|
-
"command": "./tools/review-ui"
|
|
103
|
-
}
|
|
97
|
+
"agentContextFiles": ["docs/AI_GUIDE.md"]
|
|
104
98
|
}
|
|
105
99
|
```
|
|
106
100
|
|
|
107
|
-
Tau resolves the
|
|
101
|
+
Tau resolves the path as `/home/ada/work/ledger/docs/AI_GUIDE.md`.
|
|
108
102
|
|
|
109
103
|
Other strings that happen to contain paths are not automatically rebased unless their field contract says so. In particular, hosted execution-environment `home` values are passed as configured.
|
|
110
104
|
|
|
@@ -158,7 +152,6 @@ Never verify a secret by printing the full config or environment into a shared t
|
|
|
158
152
|
Tau loads startup configuration and content before opening the TUI. Restart the local TUI or `tau attach` to apply client-owned changes such as:
|
|
159
153
|
|
|
160
154
|
- `defaultTheme`
|
|
161
|
-
- `diffTool` and `builtInDiffTool`
|
|
162
155
|
- `clientTools` and `enabledClientTools`
|
|
163
156
|
- client environment variables
|
|
164
157
|
|
|
@@ -345,7 +345,7 @@ The handler receives `sessionId`, owning `agentId`, `callId`, an `AbortSignal`,
|
|
|
345
345
|
|
|
346
346
|
`describe` is optional. When present, the SDK calls it with the arguments and a reduced context containing `sessionId`, `agentId`, `callId`, and `signal` before acknowledgement. This context deliberately has no execution-environment facade. It may return a partial running presentation containing `subject`, `subjectWrap`, `details`, or `metadata`. Tau owns action and operation, fills every omitted field, and acknowledges the resolved presentation before calling `execute`.
|
|
347
347
|
|
|
348
|
-
The execution result may independently include the same partial shape for the terminal card. Return a string or `{ content, presentation? }` for success, or `{ ok: false, error, presentation? }` for a structured failure. Omitted presentation fields use Tau's terminal defaults; empty detail or metadata arrays suppress those defaults. If `describe` throws, the SDK reports a preparation error without calling `execute`. If the client never returns a result because of cancellation, timeout, detach, or another failure, the host produces a complete fallback presentation.
|
|
348
|
+
The execution result may independently include the same partial shape for the terminal card. Return a string or `{ content, presentation? }` for success, or `{ ok: false, error, presentation? }` for a structured failure. Successful `content` may be a string or an ordered array of text/image blocks. Strings are delivered as one text block. Omitted presentation fields use Tau's terminal defaults; empty detail or metadata arrays suppress those defaults. If `describe` throws, the SDK reports a preparation error without calling `execute`. If the client never returns a result because of cancellation, timeout, detach, or another failure, the host produces a complete fallback presentation.
|
|
349
349
|
|
|
350
350
|
Tau preserves every explicit presentation field up to the protocol safety limits; it does not apply display truncation or normalize client text. `truncateTauClientToolText` provides optional caller-controlled line, character, and head or middle truncation. Use its result directly for a subject. For a block of detail text, split the result on `\n` and map each line to one `details` entry; use `maxLines: 1` when assigning it directly to one detail or metadata entry. The helper shapes text but does not replace protocol validation. The SDK aborts handlers on host cancellation, client close, or terminal transport failure. `client.close()` waits for active handlers to settle.
|
|
351
351
|
|
|
@@ -375,7 +375,9 @@ const tickets = createTauCodeModeClientTool({
|
|
|
375
375
|
});
|
|
376
376
|
```
|
|
377
377
|
|
|
378
|
-
Pass `tickets` in `clientTools`. Generated code receives the declared API namespace, progressively disclosed `docs`, console output, live `Date` and `Math`, and agent-scoped scratch files when invoked as a client tool. API calls cross a bounded JSON bridge. The submitted code appears, concisely truncated and character-wrapped, as the running and terminal tool-card subject. The tool description remains explicit caller input; the builder is optional.
|
|
378
|
+
Pass `tickets` in `clientTools`. Generated code receives the declared API namespace, progressively disclosed `docs`, console output, the asynchronous `image(block)` output helper, live `Date` and `Math`, and agent-scoped scratch files when invoked as a client tool. API calls cross a bounded JSON bridge. The submitted code appears, concisely truncated and character-wrapped, as the running and terminal tool-card subject. The tool description remains explicit caller input; the builder is optional.
|
|
379
|
+
|
|
380
|
+
Use `await image({ type: "image", data, mimeType })` to forward a base64 image. Successful code-mode results contain an ordered `content` array of text/image blocks. SDK client tools preserve that order: adjacent console writes form one text block, and each awaited image separates the preceding and following text. The helper validates and prepares JPEG, PNG, or WebP images outside the sandbox, creates no files, and shares the limits described in [tools](tools.md).
|
|
379
381
|
|
|
380
382
|
The SDK also exports `executeTauCodeMode` for standalone execution. The separate `@markusylisiurunen/tau/code-mode` entry point additionally exports file-capability types, `runTauClientToolCommand`, and `runTauCodeModeCommand` for command-backed tools. Use the helpers instead of implementing their framing manually.
|
|
381
383
|
|
|
@@ -16,6 +16,8 @@ The **host** creates, observes, persists, and recovers sessions. It owns model c
|
|
|
16
16
|
|
|
17
17
|
The host's home owns data such as session snapshots, authentication storage, usage logs, and the local history database. Use Tau commands and session operations to manage these stores rather than editing their files directly.
|
|
18
18
|
|
|
19
|
+
MCP connections are host-owned. Configure servers on the host; stdio servers run there, with host credentials and host resource access, not in the session execution environment.
|
|
20
|
+
|
|
19
21
|
The intrinsic `tau_docs` tool is also host-owned. It reads documentation packaged with the installed host version.
|
|
20
22
|
|
|
21
23
|
### Execution environment
|
|
@@ -57,7 +59,7 @@ A Fly Sprite can place the execution environment on another target while the hos
|
|
|
57
59
|
| Session snapshots | Host home | Local defaults live under the host's Tau config directory. Do not edit session files. |
|
|
58
60
|
| Local transcript history and remote history outbox | Host home | History follows the host, not an attached TUI or execution target. |
|
|
59
61
|
| Terminal theme and `/theme` | TUI client | An attached client selects from Tau’s built-in themes. Themes are not session state. |
|
|
60
|
-
| `/diff` process | TUI client |
|
|
62
|
+
| `/diff` process | TUI client | Tau’s built-in browser tool runs on the client machine. Repository capture still runs through the session execution environment. |
|
|
61
63
|
| Configured command client tools | Owning client | Commands and their environment are client-local; their execution-environment facade reaches the session target explicitly. |
|
|
62
64
|
| `/listen` and `/speak` capture or playback | TUI client | Required programs, devices, and media credentials belong on the client machine. |
|
|
63
65
|
| Host execution-environment targets | Host startup | Fly Sprite API definitions must be available to the host before it accepts sessions using them. |
|
|
@@ -84,7 +86,7 @@ tau attach --new --cwd /srv/ledger ws://devbox.example:8787
|
|
|
84
86
|
|
|
85
87
|
The path `/srv/ledger` is interpreted by the host and its local execution environment. Project personas and `.tau/config.json` are read from `/srv/ledger` and its ancestors on `devbox.example`. The laptop's current directory does not influence that session runtime.
|
|
86
88
|
|
|
87
|
-
The laptop still loads its own theme
|
|
89
|
+
The laptop still loads its own theme and command client tools before attaching. `/diff` launches Tau’s built-in browser tool on the laptop. Git snapshot commands for the review run through the session and therefore see `/srv/ledger` on the execution environment.
|
|
88
90
|
|
|
89
91
|
If the selected persona needs a provider credential, the host on `devbox.example` makes the model call. Export the provider environment variable for `tau serve` there, or make the appropriate runtime configuration available to that host. Setting it only in the laptop shell does not authenticate the remote host.
|
|
90
92
|
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Personas
|
|
2
2
|
|
|
3
|
-
A persona is Tau's complete model-facing working profile. It chooses a provider and model, supplies the base system prompt, sets reasoning and service behavior, and selects tools
|
|
3
|
+
A persona is Tau's complete model-facing working profile. It chooses a provider and model, supplies the base system prompt, sets reasoning and service behavior, and selects tools and skills. Changing persona changes how future turns run without creating a new session.
|
|
4
4
|
|
|
5
5
|
Tau ships generated built-in personas and discovers custom persona Markdown from the execution environment. The effective list is version-specific and scope-specific, so inspect the current catalog rather than relying on a memorized list of names.
|
|
6
6
|
|
|
7
7
|
## Built-in and effective personas
|
|
8
8
|
|
|
9
|
-
Built-in personas are generated from Tau's current model catalog. Most model families have separate chat and coder variants; some families expose only the variants Tau supports. Built-ins carry Tau-maintained prompts, defaults, tool selections, skills, and
|
|
9
|
+
Built-in personas are generated from Tau's current model catalog. Most model families have separate chat and coder variants; some families expose only the variants Tau supports. Built-ins carry Tau-maintained prompts, defaults, tool selections, skills, and subagent supervision tools.
|
|
10
10
|
|
|
11
11
|
The Opus 5.5 chat and coder personas are available only when `anthropic/claude-opus-5-5` is present in the effective model catalog. The Sonnet 5.5 variants (`sonnet-5.5-chat` and `sonnet-5.5-coder`) likewise require `anthropic/claude-sonnet-5-5`.
|
|
12
12
|
|
|
@@ -16,7 +16,7 @@ All built-in personas default to medium reasoning. The startup default is `sonne
|
|
|
16
16
|
|
|
17
17
|
After a remote catalog refresh, `/reload` adopts the updated catalog for an existing session.
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
Built-in personas are always included in the catalog. Custom personas can replace a built-in by using the same ID.
|
|
20
20
|
|
|
21
21
|
Use one of these to inspect the current effective list:
|
|
22
22
|
|
|
@@ -67,14 +67,6 @@ tools:
|
|
|
67
67
|
- view_image
|
|
68
68
|
- web
|
|
69
69
|
- history
|
|
70
|
-
subagents:
|
|
71
|
-
default: false
|
|
72
|
-
verifier:
|
|
73
|
-
description: Verify release state independently. Trigger: balanced.
|
|
74
|
-
systemPrompt: Verify the requested release state and report concrete blockers.
|
|
75
|
-
tools:
|
|
76
|
-
- bash
|
|
77
|
-
- history
|
|
78
70
|
---
|
|
79
71
|
|
|
80
72
|
Work as a release engineer. Inspect repository policy before changing release state.
|
|
@@ -104,16 +96,15 @@ The frontmatter must be a YAML object between valid delimiters. Unknown fields a
|
|
|
104
96
|
| `allowedReasoningLevels` | Array of reasoning efforts offered by the TUI selector. |
|
|
105
97
|
| `skills` | `"*"`, a list of discovered skill names, or `[]`. |
|
|
106
98
|
| `tools` | Explicit list of persona-controlled tools. |
|
|
107
|
-
| `subagents` | Map of enabled subagent definitions. |
|
|
108
99
|
|
|
109
|
-
If a standalone custom persona omits `skills`, Tau selects all discovered skills with `"*"`. If it omits `
|
|
100
|
+
If a standalone custom persona omits `skills`, Tau selects all discovered skills with `"*"`. If it omits `tools`, Tau enables the ordinary host tools plus subagent supervision tools. An explicit `tools` list without `spawn_agent` prevents subagent launches. See [skills](skills.md) and [subagents](subagents.md) for those contracts.
|
|
110
101
|
|
|
111
102
|
The persona-controlled tool names are:
|
|
112
103
|
|
|
113
|
-
- `bash`, `write`, `edit`, `view_image`, `web`, `nook`, and `
|
|
104
|
+
- `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, and `mcp`;
|
|
114
105
|
- `spawn_agent`, `send_input_to_agent`, `wait_for_agents`, `list_agents`, and `interrupt_agent`.
|
|
115
106
|
|
|
116
|
-
An explicit `tools` array replaces defaults. Names are normalized to lowercase, duplicates are removed, and unknown names reject the persona. `tools: []` leaves the persona without these persona-controlled tools. Some host capabilities, such as goal management, are supplied independently of this list. Listing `nook` does not make it usable without effective Nook configuration. [Tools](tools.md) explains eligibility and ownership.
|
|
107
|
+
An explicit `tools` array replaces defaults. Names are normalized to lowercase, duplicates are removed, and unknown names reject the persona. `tools: []` leaves the persona without these persona-controlled tools. Some host capabilities, such as goal management, are supplied independently of this list. Listing `nook` does not make it usable without effective Nook configuration. Listing `mcp` requires enabled MCP servers configured on the host. [Tools](tools.md) explains eligibility and ownership.
|
|
117
108
|
|
|
118
109
|
## Extending a built-in
|
|
119
110
|
|
|
@@ -135,10 +126,8 @@ Important boundaries are:
|
|
|
135
126
|
|
|
136
127
|
- `extends` resolves shipped built-ins, not another custom persona.
|
|
137
128
|
- Lookup of the built-in ID is case-insensitive.
|
|
138
|
-
- It remains available as an inheritance base even when `disableBuiltinPersonas` hides built-ins from the effective catalog.
|
|
139
129
|
- A non-empty Markdown body replaces the inherited base prompt.
|
|
140
130
|
- Explicit `skills` or `tools` replaces the inherited selection.
|
|
141
|
-
- Explicit `subagents` builds a new subagent map rather than merging custom entries into the inherited map. Unless that map contains `default: false`, Tau adds the built-in `default` subagent.
|
|
142
131
|
- `reasoning` and `serviceTier` override their individual inherited settings; omitted settings remain inherited.
|
|
143
132
|
|
|
144
133
|
Extending a built-in is useful when Tau's maintained behavior is the desired base. A standalone body is more stable when the persona must not change as Tau updates its built-in prompts.
|
|
@@ -187,7 +176,7 @@ Run `/reload` while the TUI session is idle after editing personas, `models.json
|
|
|
187
176
|
|
|
188
177
|
If the current persona ID still exists, Tau applies its newly loaded definition. This can reset runtime settings such as reasoning or service tier to the definition's values. If the ID disappeared, Tau selects the first effective persona. Existing session messages remain; changing a persona does not rewrite prior model-facing history.
|
|
189
178
|
|
|
190
|
-
A reload does not alter a turn already in progress, and the TUI refuses the operation while one is running. Existing live subagent threads retain the runtime with which they were created; newly spawned subagents
|
|
179
|
+
A reload does not alter a turn already in progress, and the TUI refuses the operation while one is running. Existing live subagent threads retain the runtime with which they were created; newly spawned subagents inherit the reloaded persona. See [subagents](subagents.md).
|
|
191
180
|
|
|
192
181
|
## Validation and common mistakes
|
|
193
182
|
|
|
@@ -200,8 +189,6 @@ An invalid persona is skipped and reported as a configuration warning. Other val
|
|
|
200
189
|
- an `extends` target that is not a shipped built-in;
|
|
201
190
|
- an invalid reasoning effort or service tier;
|
|
202
191
|
- `skills` that is neither `"*"` nor a string list, or contains a blank entry;
|
|
203
|
-
- an unknown persona tool
|
|
204
|
-
- an invalid subagent name, missing custom `systemPrompt`, unsupported subagent tool, or invalid launch model; and
|
|
205
|
-
- attempting to override the built-in `default` subagent instead of using `default: false`.
|
|
192
|
+
- an unknown persona tool.
|
|
206
193
|
|
|
207
194
|
`/reload` surfaces warning paths directly in the transcript. For a new local TUI session, `tau --debug --persona <id>` shows the selected model, settings, skills, subagents, tools, and complete effective prompt. If a remote edit appears to have no effect, confirm the session execution environment and `cwd` before changing another copy of the file. [Troubleshooting](troubleshooting.md) covers that check in more detail.
|
|
@@ -149,7 +149,7 @@ The alternate directory controls:
|
|
|
149
149
|
- target applicable `AGENTS.md` and `agentContextFiles`,
|
|
150
150
|
- target-discovered skills filtered by the parent persona.
|
|
151
151
|
|
|
152
|
-
The parent session remains the source of truth for the selected persona,
|
|
152
|
+
The parent session remains the source of truth for the selected persona, model catalog, model settings, and tool policy. Tau filters skills discovered at the alternate directory through the parent persona's skill selection. It does not replace the source persona with a persona found in the target directory. See [subagents](subagents.md) for the full launch contract.
|
|
153
153
|
|
|
154
154
|
## Leading hidden system blocks
|
|
155
155
|
|
|
@@ -150,7 +150,7 @@ An attached session spans three logical machines even when two happen to share o
|
|
|
150
150
|
- command execution, platform, PATH, and runtime dependencies
|
|
151
151
|
- automatic-compaction archives and other target-side temporary files
|
|
152
152
|
|
|
153
|
-
This is why changing a host’s theme selection does not affect a remote TUI, why `!git status` runs against the execution environment, and why
|
|
153
|
+
This is why changing a host’s theme selection does not affect a remote TUI, why `!git status` runs against the execution environment, and why the built-in diff review tool opens on the attaching machine. [Ownership and scope](ownership-and-scope.md) applies the same model across Tau.
|
|
154
154
|
|
|
155
155
|
## Reload or restart the correct process
|
|
156
156
|
|
|
@@ -161,7 +161,7 @@ Different changes have different owners:
|
|
|
161
161
|
| Project config, model overlays, personas, prompts, skills, or AGENTS.md in the execution environment | Wait for idle, then run `/reload`. |
|
|
162
162
|
| Effective model `apiKeys` in execution-environment or session configuration | Wait for idle, then run `/reload`; new sessions also resolve the current values. |
|
|
163
163
|
| Managed Codex auth changed with `tau auth` | No host restart; auth storage is read again on later credential resolutions. |
|
|
164
|
-
| Attaching themes,
|
|
164
|
+
| Attaching themes, speech config, or configured client tools | Restart `tau attach`. |
|
|
165
165
|
| Host process environment variables, history target, WebSocket listener, Fly API target, or host startup flags | Restart `tau serve`. |
|
|
166
166
|
| Host Tau package, built-in tools, protocol, session recovery code, or built-in documentation | Upgrade and restart the host. |
|
|
167
167
|
| TUI package, keybindings, rendering, local speech, or client-tool implementation | Upgrade and restart the attaching client. |
|
|
@@ -26,7 +26,7 @@ The execution environment supplies more than source files. Tau can load project
|
|
|
26
26
|
|
|
27
27
|
A repository checkout is therefore part of Tau's trust boundary. Before using it with meaningful credentials or write access, inspect relevant `.tau/`, `.agents/`, and `AGENTS.md` content, including nearer nested levels. Pay particular attention to:
|
|
28
28
|
|
|
29
|
-
- persona system prompts, tool lists,
|
|
29
|
+
- persona system prompts, tool lists, and model launch allowlists;
|
|
30
30
|
- skill instructions and any scripts they direct the agent to run;
|
|
31
31
|
- model overlays that replace endpoints, headers, capabilities, or token limits;
|
|
32
32
|
- project configuration that supplies API keys, Nook targets, model notices, or hosted-environment definitions;
|
|
@@ -100,11 +100,11 @@ Before enabling one:
|
|
|
100
100
|
|
|
101
101
|
A project `enabledClientTools` list is permission to select an already trusted global definition. Unknown selected names are ignored, so verify effective advertisement after changes. Start an untrusted project with `--no-client-tools` until its selection has been reviewed.
|
|
102
102
|
|
|
103
|
-
The TUI's diff
|
|
103
|
+
The TUI's built-in diff review tool is also a client-local process.
|
|
104
104
|
|
|
105
105
|
## Use code mode as a capability boundary
|
|
106
106
|
|
|
107
|
-
The generated JavaScript used by `web`, `history`, `nook`, and code-mode client tools runs in Tau's bounded worker runtime. It receives only a declared API, `docs`, console output, live `Date`, `Math.random()`, and, when configured, agent-scoped UTF-8 scratch files. Generated code has no direct imports, process, environment, credentials, timers, `fetch`, or arbitrary network access.
|
|
107
|
+
The generated JavaScript used by `web`, `history`, `nook`, `mcp`, and code-mode client tools runs in Tau's bounded worker runtime. It receives only a declared API, `docs`, console output, the asynchronous `image(block)` output helper, live `Date`, `Math.random()`, and, when configured, agent-scoped UTF-8 scratch files. Generated code has no direct imports, process, environment, credentials, timers, `fetch`, or arbitrary network access.
|
|
108
108
|
|
|
109
109
|
API handlers run outside that worker and retain the authority deliberately exposed by the tool. The boundary therefore limits generated code to declared capabilities, but it does not make an overpowered API safe. Tool authors should validate every argument, expose narrow operations, keep credentials in the parent, enforce cancellation, and avoid returning secrets.
|
|
110
110
|
|
|
@@ -112,6 +112,18 @@ Scratch files live in a private execution-environment temporary directory derive
|
|
|
112
112
|
|
|
113
113
|
The `history` code-mode API is read-only, but it can see transcripts across repositories and execution environments in the configured collection. Its agent policy requires a direct user or active-instruction request before use. That policy does not replace access control on the history service.
|
|
114
114
|
|
|
115
|
+
## Trust MCP servers
|
|
116
|
+
|
|
117
|
+
MCP server definitions come from the host launch directory's global and ancestor/project configuration layers. Launching a host inside a repository trusts those layers to introduce host commands and use host credentials; there is no approval dialog. MCP capabilities apply to all sessions on that host whose persona allows `mcp`, and their supervised subagents; they are not isolated per repository or client. Session execution-environment configuration cannot introduce servers.
|
|
118
|
+
|
|
119
|
+
A stdio MCP server is trusted host code. It runs outside the code-mode sandbox with the host account's filesystem and process permissions and full inherited environment, including credentials. Review executables and arguments before configuring them. HTTP servers receive configured headers and the arguments sent to their tools. Use HTTPS for remote services and grant only the access needed.
|
|
120
|
+
|
|
121
|
+
MCP does not add a confirmation layer. Tools can mutate external systems or host resources immediately. Interrupting a call cannot undo a completed effect, and an unknown outcome does not make retrying a mutation safe. Server descriptions, instructions, annotations, and results are untrusted data. Annotations such as `readOnlyHint` are not enforced permissions.
|
|
122
|
+
|
|
123
|
+
Stdio shutdown depends on the MCP transport. Descendants that ignore `SIGTERM` can survive when the server process exits first; do not rely on shutdown to contain untrusted server processes.
|
|
124
|
+
|
|
125
|
+
The execution environment does not sandbox a host-run MCP server. A server that exposes host files or commands gives the agent that host authority even when Bash runs in a remote sandbox. Disable `mcp` in the persona or disable the server if that authority is inappropriate. Connections and credentials stay outside the generated JavaScript, but the configured server remains responsible for what its tools return.
|
|
126
|
+
|
|
115
127
|
## Protect remote session transports
|
|
116
128
|
|
|
117
129
|
`tau serve` binds to loopback by default. Keep that default unless remote network access is required. A WebSocket server without `--auth-token` or `TAU_WS_AUTH_TOKEN` is unauthenticated, and any connected client can observe and mutate hosted sessions.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Session protocol method reference
|
|
2
2
|
|
|
3
|
-
This page defines every request method in protocol version
|
|
3
|
+
This page defines every request method in protocol version 15. It is the compact wire reference for clients that already understand connection, observation, and delta application from the [session protocol](session-protocol.md).
|
|
4
4
|
|
|
5
5
|
Every request uses `{ version, type: "request", id, method, params }`. Every successful response uses `{ version, type: "response", id, ok: true, result }`. `params` is required even when empty, and unknown object fields are stripped.
|
|
6
6
|
|
|
@@ -47,7 +47,7 @@ params: {
|
|
|
47
47
|
}
|
|
48
48
|
|
|
49
49
|
result: {
|
|
50
|
-
protocolVersion:
|
|
50
|
+
protocolVersion: 15;
|
|
51
51
|
methods: string[];
|
|
52
52
|
alreadyInitialized: boolean;
|
|
53
53
|
}
|
|
@@ -594,7 +594,10 @@ params:
|
|
|
594
594
|
sessionId: string;
|
|
595
595
|
callId: string;
|
|
596
596
|
ok: true;
|
|
597
|
-
content:
|
|
597
|
+
content: Array<
|
|
598
|
+
| { type: "text"; text: string; textSignature?: string }
|
|
599
|
+
| { type: "image"; data: string; mimeType: "image/jpeg" | "image/png" | "image/webp" }
|
|
600
|
+
>;
|
|
598
601
|
presentation?: PresentationOverride;
|
|
599
602
|
}
|
|
600
603
|
| {
|
|
@@ -607,6 +610,8 @@ params:
|
|
|
607
610
|
result: { accepted: boolean };
|
|
608
611
|
```
|
|
609
612
|
|
|
613
|
+
`content` preserves text/image block order in the model-facing result, snapshots, and deltas. It may be empty and allows at most 1,024 blocks, including at most 16 images with valid padded base64 representing at most 3.5 MiB each. Image bytes are not presentation content.
|
|
614
|
+
|
|
610
615
|
The optional result presentation applies only to the reported terminal state and is resolved independently from the running presentation. The host preserves explicit fields unchanged after safety validation and supplies canonical display-truncated defaults for omitted fields. If no client result arrives, the host uses a complete fallback for timeout, cancellation, detach, or another terminal outcome.
|
|
611
616
|
|
|
612
617
|
A successful result is accepted only after the host has accepted the acknowledgement. An error sent before acknowledgement records a preparation failure, such as an error from `describe`, without authorizing execution. An error sent afterward records an execution failure.
|
|
@@ -18,7 +18,7 @@ The server sends `ready` as its first message:
|
|
|
18
18
|
|
|
19
19
|
```json
|
|
20
20
|
{
|
|
21
|
-
"version":
|
|
21
|
+
"version": 15,
|
|
22
22
|
"type": "ready",
|
|
23
23
|
"methods": ["initialize", "session.create", "session.list"]
|
|
24
24
|
}
|
|
@@ -30,7 +30,7 @@ After `ready`, send `initialize` with non-empty client metadata:
|
|
|
30
30
|
|
|
31
31
|
```json
|
|
32
32
|
{
|
|
33
|
-
"version":
|
|
33
|
+
"version": 15,
|
|
34
34
|
"type": "request",
|
|
35
35
|
"id": "init-1",
|
|
36
36
|
"method": "initialize",
|
|
@@ -50,7 +50,7 @@ Every request has the same envelope:
|
|
|
50
50
|
|
|
51
51
|
```json
|
|
52
52
|
{
|
|
53
|
-
"version":
|
|
53
|
+
"version": 15,
|
|
54
54
|
"type": "request",
|
|
55
55
|
"id": "req-42",
|
|
56
56
|
"method": "session.snapshot",
|
|
@@ -64,7 +64,7 @@ Successful responses echo the request id:
|
|
|
64
64
|
|
|
65
65
|
```json
|
|
66
66
|
{
|
|
67
|
-
"version":
|
|
67
|
+
"version": 15,
|
|
68
68
|
"type": "response",
|
|
69
69
|
"id": "req-42",
|
|
70
70
|
"ok": true,
|
|
@@ -108,6 +108,8 @@ Observation controls delivery, not session ownership. `session.unobserve` stops
|
|
|
108
108
|
| `tools`, `operations`, `agents` | Mutable semantic state referenced by timeline items or client views. |
|
|
109
109
|
| `facets` | Versioned client-facing metadata. Unknown facet kinds and versions should be ignored. |
|
|
110
110
|
|
|
111
|
+
`bootstrap.prompt.subagentSystemPrompt` is present when subagent launches are enabled. Each catalog persona has a `subagentLaunchModels` allowlist. Subagent records have task titles and IDs, not worker-type names.
|
|
112
|
+
|
|
111
113
|
Render active transcript order from `timeline.items`, not by sorting or filtering `messages`. A timeline item either contains a notice or references a message, tool, or operation in the corresponding snapshot collection. Some model-visible messages intentionally have no timeline item.
|
|
112
114
|
|
|
113
115
|
The timeline has an `epoch`, a per-epoch sequence high-water mark, and ordered items. Successful compaction replaces the active recoverable timeline and advances the epoch. Rewind stays in the same epoch, removes later items, and preserves the sequence high-water mark so sequence numbers are not reused.
|
|
@@ -128,7 +130,7 @@ Observed snapshot changes arrive as `session.delta`:
|
|
|
128
130
|
|
|
129
131
|
```json
|
|
130
132
|
{
|
|
131
|
-
"version":
|
|
133
|
+
"version": 15,
|
|
132
134
|
"type": "session.delta",
|
|
133
135
|
"sessionId": "0195d6e4-4cf9-7f44-a2d8-f8f7f49ee9d3",
|
|
134
136
|
"fromRevision": 8,
|
|
@@ -166,7 +168,7 @@ Not all observed state belongs in the recoverable snapshot. Each live channel ha
|
|
|
166
168
|
|
|
167
169
|
```json
|
|
168
170
|
{
|
|
169
|
-
"version":
|
|
171
|
+
"version": 15,
|
|
170
172
|
"type": "session.pendingUserMessages",
|
|
171
173
|
"sessionId": "...",
|
|
172
174
|
"state": {
|
|
@@ -203,7 +205,7 @@ An initialized client that advertised a tool can receive:
|
|
|
203
205
|
|
|
204
206
|
```json
|
|
205
207
|
{
|
|
206
|
-
"version":
|
|
208
|
+
"version": 15,
|
|
207
209
|
"type": "session.clientTool.call",
|
|
208
210
|
"sessionId": "...",
|
|
209
211
|
"agentId": "main",
|
|
@@ -215,7 +217,7 @@ An initialized client that advertised a tool can receive:
|
|
|
215
217
|
}
|
|
216
218
|
```
|
|
217
219
|
|
|
218
|
-
Acknowledge promptly with `session.clientTool.ack`, optionally including a bounded partial running presentation. Begin execution only after the acknowledgement returns `{ accepted: true }`, then send exactly one `session.clientTool.result` with either `{ ok: true, content }` or `{ ok: false, error }` and an optional independent terminal presentation. Both presentation objects may contain `subject`, `subjectWrap`, `details`, and `metadata`; the host owns action and operation and supplies every omitted field. Explicit fields are preserved unchanged after protocol safety validation, while generated defaults use Tau's canonical display truncation. Empty detail or metadata arrays suppress those defaults.
|
|
220
|
+
Acknowledge promptly with `session.clientTool.ack`, optionally including a bounded partial running presentation. Begin execution only after the acknowledgement returns `{ accepted: true }`, then send exactly one `session.clientTool.result` with either `{ ok: true, content }` or `{ ok: false, error }` and an optional independent terminal presentation. Successful `content` is an ordered array of text/image blocks. Both presentation objects may contain `subject`, `subjectWrap`, `details`, and `metadata`; the host owns action and operation and supplies every omitted field. Explicit fields are preserved unchanged after protocol safety validation, while generated defaults use Tau's canonical display truncation. Empty detail or metadata arrays suppress those defaults.
|
|
219
221
|
|
|
220
222
|
A successful result is rejected until acknowledgement has completed. If preparation itself fails, send an error result before acknowledgement; the host records it as a preparation failure without authorizing execution. If no result arrives because of timeout, cancellation, detach, or another failure, the host renders a complete fallback terminal presentation. The result method returns `{ accepted: boolean }`; `false` means the message is invalid for the call's current state or the call is no longer waiting for it.
|
|
221
223
|
|
|
@@ -227,7 +229,7 @@ Error responses use `ok: false`:
|
|
|
227
229
|
|
|
228
230
|
```json
|
|
229
231
|
{
|
|
230
|
-
"version":
|
|
232
|
+
"version": 15,
|
|
231
233
|
"type": "response",
|
|
232
234
|
"id": "req-42",
|
|
233
235
|
"ok": false,
|