@markusylisiurunen/tau 0.3.82 → 0.3.84
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +1 -3
- package/dist/core/agent/agent_runtime.js +10 -6
- package/dist/core/agent/agent_runtime.js.map +1 -1
- package/dist/core/cli.js +2 -2
- package/dist/core/cli.js.map +1 -1
- package/dist/core/code_mode/models.js +61 -22
- package/dist/core/code_mode/models.js.map +1 -1
- package/dist/core/commands/auto_compact.js +16 -0
- package/dist/core/commands/auto_compact.js.map +1 -0
- package/dist/core/commands/registry.js +13 -0
- package/dist/core/commands/registry.js.map +1 -1
- package/dist/core/history/cli.js +48 -0
- package/dist/core/history/cli.js.map +1 -1
- package/dist/core/history/history_manager.js +9 -3
- package/dist/core/history/history_manager.js.map +1 -1
- package/dist/core/history/local_history_store.js +9 -2
- package/dist/core/history/local_history_store.js.map +1 -1
- package/dist/core/history/remote_history_client.js +18 -3
- package/dist/core/history/remote_history_client.js.map +1 -1
- package/dist/core/models/openrouter.js +17 -5
- package/dist/core/models/openrouter.js.map +1 -1
- package/dist/core/models/openrouter_decisions.js +16 -1
- package/dist/core/models/openrouter_decisions.js.map +1 -1
- package/dist/core/runtime/chat_runtime.js +5 -0
- package/dist/core/runtime/chat_runtime.js.map +1 -1
- package/dist/core/session/auto_compaction_threshold.js +4 -0
- package/dist/core/session/auto_compaction_threshold.js.map +1 -0
- package/dist/core/static/tau_docs/client-tools.md +53 -53
- package/dist/core/static/tau_docs/config-reference.md +46 -43
- package/dist/core/static/tau_docs/configuration.md +40 -36
- package/dist/core/static/tau_docs/credentials.md +32 -31
- package/dist/core/static/tau_docs/getting-started.md +28 -28
- package/dist/core/static/tau_docs/history.md +114 -79
- package/dist/core/static/tau_docs/image-generation.md +20 -18
- package/dist/core/static/tau_docs/index.md +30 -31
- package/dist/core/static/tau_docs/manifest.json +1 -0
- package/dist/core/static/tau_docs/models.md +17 -17
- package/dist/core/static/tau_docs/node-sdk.md +74 -69
- package/dist/core/static/tau_docs/nook.md +75 -69
- package/dist/core/static/tau_docs/openrouter.md +28 -13
- package/dist/core/static/tau_docs/ownership-and-scope.md +21 -23
- package/dist/core/static/tau_docs/pdf-unpacking.md +6 -6
- package/dist/core/static/tau_docs/personas.md +29 -27
- package/dist/core/static/tau_docs/prompts-and-project-context.md +41 -39
- package/dist/core/static/tau_docs/remote-sessions.md +38 -38
- package/dist/core/static/tau_docs/sdk-diff-review.md +16 -12
- package/dist/core/static/tau_docs/security.md +72 -72
- package/dist/core/static/tau_docs/session-protocol-methods.md +69 -45
- package/dist/core/static/tau_docs/session-protocol.md +59 -52
- package/dist/core/static/tau_docs/sessions.md +112 -88
- package/dist/core/static/tau_docs/skills.md +25 -20
- package/dist/core/static/tau_docs/speech-generation.md +5 -5
- package/dist/core/static/tau_docs/subagents.md +42 -44
- package/dist/core/static/tau_docs/telegram-projects.md +142 -0
- package/dist/core/static/tau_docs/telegram.md +67 -181
- package/dist/core/static/tau_docs/tools.md +72 -80
- package/dist/core/static/tau_docs/troubleshooting.md +94 -149
- package/dist/core/static/tau_docs/tui.md +127 -80
- package/dist/core/subagents/agent_supervisor.js +1 -0
- package/dist/core/subagents/agent_supervisor.js.map +1 -1
- package/dist/core/telegram/adapter.js +31 -1
- package/dist/core/telegram/adapter.js.map +1 -1
- package/dist/core/telegram/session_manager.js +11 -0
- package/dist/core/telegram/session_manager.js.map +1 -1
- package/dist/core/tool/image_generate.js +5 -17
- package/dist/core/tool/image_generate.js.map +1 -1
- package/dist/core/tool/openrouter.js +21 -2
- package/dist/core/tool/openrouter.js.map +1 -1
- package/dist/core/utils/gemini_transcription.js +43 -13
- package/dist/core/utils/gemini_transcription.js.map +1 -1
- package/dist/core/utils/model_stream.js +17 -1
- package/dist/core/utils/model_stream.js.map +1 -1
- package/dist/core/version.js +2 -2
- package/dist/diff_tool/app/dist/assets/{angular-html-D20byCHL.js → angular-html-Dr923UVo.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-CvVQslm2.js → angular-ts-DOChuIbB.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-DNIxlYWe.js → apl-Bs_bcAcm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-DDOw4EUG.js → astro-a4yvqyGV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-DlhB-SLW.js → blade-BD5OxwVc.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-C1f4vhDm.js → c-CPWQkPLc.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-Ctt8xOX1.js → chapel-DaQatW92.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-BXw71PAA.js → cobol-Dv7H5p9m.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-CRh_5Nmr.js → coffee-BUGvGi57.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-IlI-zWOZ.js → cpp-fo_wPsB8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-CXeL28i7.js → crystal--pI-R_dD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-BfST9hFI.js → css-BssyxPkY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge--Q22k_ty.js → edge-CZ8t3-Ec.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-CIfC_rQx.js → elixir-UZt0J7RJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-OkZ29XRO.js → elm-DIbchse0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-B8ZXgEqv.js → erb-BOBhlFtI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-CxkO_WGd.js → git-rebase-BAOt70YV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-BVadyIrr.js → glimmer-js-CEvU-NQC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-D5J3Qb7n.js → glimmer-ts-BTMr7YQb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-B6iy73-Y.js → glsl-BdwQytbZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-Dc3rUXf5.js → graphql-MVXf_Gip.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-q8Utf8Jp.js → hack-BKsyThYd.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-mjMIlj_2.js → haml-aYjo4kTQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-CA-BL8Ks.js → handlebars-CkBj5nNj.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-BmPxhYCX.js → html-V_XLZjq3.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-CvknIjuB.js → html-derivative-CLtkZVT2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-DNxLDRIi.js → http-nUN1ldGy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-kbd3Eq2V.js → hurl-BBwLfekr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-Dt2v7POE.js +341 -0
- package/dist/diff_tool/app/dist/assets/{java-BuZshgf1.js → java-DLkxtNEL.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-DfL2oeFU.js → javascript-CVr4Rx0e.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-Bu0KQihU.js → jinja-BOSJTyD0.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-Bqn7Mf3Q.js → jison-Di3-hBGP.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-BuX5LKaB.js → json-D9C8xfZt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-DdVJ-ZBp.js → jsx-CUDhGSfU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-CQeijOoQ.js → julia-CRy8R7YY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-vzAktFGR.js → just-tUqjHI43.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-Dm60cg0k.js → latex-8_LCZmZN.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-vxKzm2P8.js → liquid-CvGorueR.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-DIoqi4dd.js → lua-DR_7pVFC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-BTHgFKby.js → marko-sTN8ZOd5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-CEfz8gZ9.js → mdc-xRsS5Ubl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-DNlFDEfJ.js → nginx-ypaVSshx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-DnvT_0lZ.js → nim-DTc1FpAl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-BbD-ElVf.js → org-B7I2tEAw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-DTsbnAmK.js → perl-CTNhHvKx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-CwEsJe-W.js → php-LzxyOsOP.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-BOttMVH-.js → pug-D5FIy7qc.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-C8KkSItN.js → qml-CfdV5Js7.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-K4ksJj_R.js → r-CZ-EMZDs.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-yuWRrrG6.js → razor-BhyBjPmN.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-CV-jhnUz.js → regexp-iPvMX04S.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-CLA3Attc.js → rst-Dpp9DE6Q.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-DiHR2-DX.js → ruby-CVyShlOK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-DxIjbYJ5.js → sas-DFmollAV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-CShwEaV4.js → scss-Di6lsIQE.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-CeezOnrF.js → shellscript-CRHervLi.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-CjSS2r7j.js → shellsession-CHP7Q5Ym.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-CI_v23nJ.js → soy-CNXyGE_T.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-D9GaB00A.js → sql-DnPFF_uz.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-hK92TPE_.js → stata-CobN2W6n.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-UO8LtPJG.js → surrealql-DqvGXHs7.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-kIlaw_oh.js → svelte-ChhfFBzQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-DFRz1JP6.js → templ-DKi2U_4-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-CfxIXk_z.js → tex-Cjl-M5D5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-BtUHl0ff.js → ts-tags-CV2veQhe.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Cd4SAe2C.js → tsx-Dw0DYsvT.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-CWk4q5Y3.js → twig-r46-w1o_.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-BqxGJiP0.js → typescript-QuYM-098.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-D9nAun2p.js → typst-B9jAU5LS.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-D6HYhg6_.js → vue-CIrFiYWU.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-1VRlaENS.js → vue-html-bfczklzO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-BaH0We9y.js → vue-vine-BmBCOwQI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-C4RWnUuj.js → xml-DYPsS0xh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-D1iD38ga.js → xsl-DZFDwCkt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-yAb4W0G-.js → yaml-9CQ32JJD.js} +1 -1
- package/dist/diff_tool/app/dist/index.html +1 -1
- package/dist/history/worker/index.js +87 -83
- package/dist/history/worker/index.js.map +1 -1
- package/dist/host/hosted_ephemeral_agent_session.js +1 -0
- package/dist/host/hosted_ephemeral_agent_session.js.map +1 -1
- package/dist/host/local_session_host.js +30 -1
- package/dist/host/local_session_host.js.map +1 -1
- package/dist/host/session_protocol_handler.js +18 -0
- package/dist/host/session_protocol_handler.js.map +1 -1
- package/dist/main.js +6 -7
- package/dist/main.js.map +1 -1
- package/dist/protocol/index.d.ts +1 -1
- package/dist/protocol/index.js.map +1 -1
- package/dist/protocol/session_protocol.d.ts +13 -2
- package/dist/protocol/session_protocol.js +31 -1
- package/dist/protocol/session_protocol.js.map +1 -1
- package/dist/sdk/index.d.ts +1 -1
- package/dist/sdk/index.js.map +1 -1
- package/dist/sdk/session.js +11 -0
- package/dist/sdk/session.js.map +1 -1
- package/dist/sdk/types.d.ts +2 -0
- package/dist/store/session_snapshot_migrations.js +19 -1
- package/dist/store/session_snapshot_migrations.js.map +1 -1
- package/dist/tui/session_chat_controller.js +41 -4
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/terminal.js +1 -0
- package/dist/tui/terminal.js.map +1 -1
- package/dist/tui/ui/chat_container.js +34 -17
- package/dist/tui/ui/chat_container.js.map +1 -1
- package/dist/tui/ui/footer.js +2 -4
- package/dist/tui/ui/footer.js.map +1 -1
- package/package.json +11 -10
- package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +0 -340
- package/dist/nook/README.md +0 -123
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
# Configuration
|
|
2
2
|
|
|
3
|
-
Tau builds configuration
|
|
3
|
+
Tau builds configuration for a working directory. It combines the shipped defaults, the global level when it applies, and every project level on the path to that directory. The same field can therefore have different values on different machines or in different directories, so first find out which working directory applies.
|
|
4
4
|
|
|
5
5
|
This page explains how the layers behave. Use [configuration reference](config-reference.md) for the fields themselves and [ownership and scope](ownership-and-scope.md) when more than one machine is involved.
|
|
6
6
|
|
|
@@ -16,7 +16,7 @@ Tau recognizes these `config.json` locations:
|
|
|
16
16
|
|
|
17
17
|
When `cwd` is inside home, discovery stops at home. When it is outside home, the global level is omitted and project discovery continues to the filesystem root.
|
|
18
18
|
|
|
19
|
-
|
|
19
|
+
A directory counts as a project level when it contains `.tau/` or `.agents/skills/`. The level does not need a `config.json` file, so a directory with only skills still takes part in content discovery.
|
|
20
20
|
|
|
21
21
|
For this layout:
|
|
22
22
|
|
|
@@ -37,11 +37,11 @@ starting from `/home/ada/work/ledger/packages/api` loads, from least to most spe
|
|
|
37
37
|
/home/ada/work/ledger/packages/api/.tau/config.json
|
|
38
38
|
```
|
|
39
39
|
|
|
40
|
-
In a remote session, the session
|
|
40
|
+
In a remote session, the session uses the `cwd` and home of the execution environment. An attached TUI loads its own client settings from the `cwd` and home of the `tau attach` process.
|
|
41
41
|
|
|
42
42
|
## How levels combine
|
|
43
43
|
|
|
44
|
-
|
|
44
|
+
For most fields, **the most specific level wins**. A value in the nearest project level replaces the same field from broader levels, including whole objects.
|
|
45
45
|
|
|
46
46
|
In `~/.config/tau/config.json`:
|
|
47
47
|
|
|
@@ -61,7 +61,7 @@ In `~/work/ledger/.tau/config.json`:
|
|
|
61
61
|
|
|
62
62
|
Within the project, the effective default persona is `gpt-6.1-sol-coder:high`.
|
|
63
63
|
|
|
64
|
-
A few fields
|
|
64
|
+
A few fields use other rules:
|
|
65
65
|
|
|
66
66
|
- `apiKeys` is global-only; project values are rejected.
|
|
67
67
|
- `modelSystemNotices` merges by normalized `<provider>/<model>` key.
|
|
@@ -70,7 +70,7 @@ A few fields intentionally use other rules:
|
|
|
70
70
|
- `clientTools` is defined only at global scope. `enabledClientTools` at the most-specific project level is an exact selection from those definitions.
|
|
71
71
|
- `history` is accepted only at global scope.
|
|
72
72
|
|
|
73
|
-
An empty
|
|
73
|
+
An empty `enabledClientTools` list in a project disables all command client tools for that project:
|
|
74
74
|
|
|
75
75
|
```json
|
|
76
76
|
{
|
|
@@ -82,20 +82,20 @@ Without `enabledClientTools`, Tau selects global client tools whose `defaultEnab
|
|
|
82
82
|
|
|
83
83
|
## How relative paths resolve
|
|
84
84
|
|
|
85
|
-
|
|
85
|
+
A relative path resolves from the level that declares it:
|
|
86
86
|
|
|
87
87
|
- A global `clientTools[].command` containing a slash resolves from home.
|
|
88
88
|
- A bare command such as `git` is left bare and resolves through the owning process's `PATH`.
|
|
89
89
|
|
|
90
|
-
Other
|
|
90
|
+
Other fields that contain paths are used as written, unless the field's reference entry says otherwise. For example, the `home` value of a hosted execution environment is passed on unchanged.
|
|
91
91
|
|
|
92
92
|
## Invalid and unknown fields
|
|
93
93
|
|
|
94
94
|
Each `config.json` must contain a JSON object. Malformed JSON, wrong types, invalid enum values, unknown model targets, and fields used at a forbidden scope produce configuration warnings. Tau keeps valid fields from the same file and continues merging other levels. Run `/reload` in an idle session to see the current warnings.
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
An invalid field is skipped. If a broader level sets the same field validly, that broader value stays in effect. A warning therefore means your override did not apply.
|
|
97
97
|
|
|
98
|
-
Unknown
|
|
98
|
+
Unknown fields are removed without a warning, both at the top level and inside nested objects. This lets an older Tau version read configuration written for a newer one. It also means a misspelled field silently has no effect:
|
|
99
99
|
|
|
100
100
|
```json
|
|
101
101
|
{
|
|
@@ -103,16 +103,16 @@ Unknown object fields are accepted and stripped without a warning. This applies
|
|
|
103
103
|
}
|
|
104
104
|
```
|
|
105
105
|
|
|
106
|
-
|
|
106
|
+
This is valid JSON but sets nothing, because `defaultPersnoa` is not a known field. Check edited keys against the [configuration reference](config-reference.md), especially when no warning appears.
|
|
107
107
|
|
|
108
108
|
## Make a safe edit
|
|
109
109
|
|
|
110
|
-
First
|
|
110
|
+
First find out what reads the setting, and on which machine, `cwd`, and home. Then choose the narrowest level that works:
|
|
111
111
|
|
|
112
|
-
- Personal defaults and secrets usually belong in
|
|
113
|
-
-
|
|
114
|
-
-
|
|
115
|
-
- Client
|
|
112
|
+
- Personal defaults and secrets usually belong in global configuration.
|
|
113
|
+
- Settings for a repository that collaborators share belong in the project's `.tau/config.json`, as long as they contain no secrets or machine-specific commands.
|
|
114
|
+
- Use a nested project level only when that subdirectory needs a different value.
|
|
115
|
+
- Client commands belong on the client. Defining them in a remote execution environment does not make them appear on an attached laptop.
|
|
116
116
|
|
|
117
117
|
Keep examples small and edit only the intended field. Validate JSON before asking Tau to load it:
|
|
118
118
|
|
|
@@ -121,65 +121,69 @@ node -e 'JSON.parse(require("node:fs").readFileSync(process.argv[1], "utf8"))' \
|
|
|
121
121
|
~/.config/tau/config.json
|
|
122
122
|
```
|
|
123
123
|
|
|
124
|
-
That check
|
|
124
|
+
That check covers syntax only. To validate fields and content references, start Tau from the relevant `cwd`:
|
|
125
125
|
|
|
126
126
|
```sh
|
|
127
127
|
cd ~/work/ledger
|
|
128
128
|
tau --debug
|
|
129
129
|
```
|
|
130
130
|
|
|
131
|
-
`--debug`
|
|
131
|
+
`--debug` inspects a local startup, and its output can include project instructions. It cannot show the state of a running host, a remote execution environment, or an attached client. For a running session, use `/reload` and read its configuration warnings. No command prints the complete effective configuration.
|
|
132
132
|
|
|
133
|
-
Never
|
|
133
|
+
Never check a secret by printing the full config or environment into a shared transcript. Instead, run the operation that needs the credential. For Codex OAuth accounts, use the auth commands.
|
|
134
134
|
|
|
135
135
|
## When changes take effect
|
|
136
136
|
|
|
137
137
|
### New local or client process
|
|
138
138
|
|
|
139
|
-
Tau loads
|
|
139
|
+
Tau loads client configuration before opening the TUI. Restart the local TUI or `tau attach` to apply client changes such as:
|
|
140
140
|
|
|
141
141
|
- `defaultTheme`
|
|
142
142
|
- `clientTools` and `enabledClientTools`
|
|
143
143
|
- client environment variables
|
|
144
144
|
|
|
145
|
-
|
|
145
|
+
`/theme:<id>` changes only the current client's appearance. Themes are not saved in the session.
|
|
146
146
|
|
|
147
147
|
### Current session runtime
|
|
148
148
|
|
|
149
|
-
|
|
149
|
+
When no turn is running, `/reload` reads configuration and content again from the execution environment. It updates the session's runtime configuration, model catalog, personas, prompts, skills, the selected persona's definition, and project context. It also reports warnings and refreshes the session catalog.
|
|
150
150
|
|
|
151
|
-
The
|
|
151
|
+
The session keeps its current persona if that persona still exists. Otherwise Tau picks the first available persona. Changing `defaultPersona` does not switch an existing session on reload. It applies to new sessions, unless a CLI flag or creation request chooses another persona.
|
|
152
152
|
|
|
153
|
-
A
|
|
153
|
+
A turn keeps the persona, model settings, and tools it started with. Reload is refused while a turn is running, and reloaded settings apply to later turns.
|
|
154
154
|
|
|
155
155
|
### Host startup
|
|
156
156
|
|
|
157
|
-
Restart the host process to apply settings
|
|
157
|
+
Restart the host process to apply settings that the host reads once at startup, including:
|
|
158
158
|
|
|
159
159
|
- `flySprites`
|
|
160
160
|
- `history`
|
|
161
|
-
- host environment variables
|
|
161
|
+
- host environment variables
|
|
162
162
|
|
|
163
|
-
For `tau serve`, make the changes on the host machine and restart the server. Restarting
|
|
163
|
+
For `tau serve`, make the changes on the host machine and restart the server. Restarting an attached TUI does not restart the host.
|
|
164
164
|
|
|
165
165
|
### New session or runner
|
|
166
166
|
|
|
167
|
-
Some settings
|
|
167
|
+
Some settings apply only when something new is created. `defaultPersona` and startup persona flags choose the persona of a new session. The execution environment's kind, identity, `cwd`, and home are fixed when the session is created or recovered.
|
|
168
168
|
|
|
169
|
-
The Telegram runner loads its speech provider and
|
|
169
|
+
The Telegram runner loads its speech provider and its runner config at startup. Restart it after changing speech, projects, routing, or workspace preparation.
|
|
170
|
+
|
|
171
|
+
- Workspace-preparation changes apply when a managed workspace is created or reconstructed. Restarting does not change a preserved workspace.
|
|
172
|
+
- Command client tools are chosen when the runner creates the client for a session. Changes apply to new sessions, and also to existing sessions when a runner restart recovers them.
|
|
173
|
+
- Existing sessions keep their recorded execution environment, unless recovery has to reconstruct a missing managed workspace (see [Telegram projects and workspaces](telegram-projects.md)).
|
|
170
174
|
|
|
171
175
|
## Common precedence mistakes
|
|
172
176
|
|
|
173
|
-
**Editing global config for a project outside home.** The global level is
|
|
177
|
+
**Editing global config for a project outside home.** The global level is skipped when the relevant `cwd` is outside home. Add a project level, or change the environment's configured home.
|
|
174
178
|
|
|
175
|
-
**Editing the laptop for host behavior.**
|
|
179
|
+
**Editing the laptop for host behavior.** Credentials, session storage, hosted-environment definitions, and project configuration on the laptop do not reach a remote host through an attached TUI.
|
|
176
180
|
|
|
177
|
-
**Editing the host
|
|
181
|
+
**Editing the host's files for a hosted environment.** A hosted execution environment has its own project files and home. Put project `.tau` content on that environment, not at a similar path on the host.
|
|
178
182
|
|
|
179
|
-
**Expecting nested objects to deep-merge.** A
|
|
183
|
+
**Expecting nested objects to deep-merge.** A nearer `mcpServers` entry replaces the whole entry with the same name, including its credentials, and a nearer `nook` object replaces the broader one completely. Repeat every setting the entry needs.
|
|
180
184
|
|
|
181
|
-
**Expecting `/reload` to
|
|
185
|
+
**Expecting `/reload` to restart the client or server.** Reload affects only the current session. Restart the process that reads the setting at startup.
|
|
182
186
|
|
|
183
|
-
**Using a project file for global-only fields.** `clientTools
|
|
187
|
+
**Using a project file for global-only fields.** `apiKeys`, `clientTools`, and `history` are rejected outside global config. `enabledClientTools` is rejected outside project config.
|
|
184
188
|
|
|
185
|
-
**Trusting a silent typo.** Unknown fields are
|
|
189
|
+
**Trusting a silent typo.** Unknown fields are removed without a warning. Valid JSON is not necessarily valid Tau configuration, so check exact names and confirm the setting changed behavior.
|
|
@@ -1,16 +1,14 @@
|
|
|
1
1
|
# Credentials
|
|
2
2
|
|
|
3
|
-
Tau
|
|
3
|
+
Tau reads secrets from configuration, environment variables, and its own OAuth storage. Put each secret on the process that makes the authenticated request. In a remote session, that is usually not the attached terminal.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This page covers where secrets come from. [Models](models.md) covers providers and model metadata.
|
|
6
6
|
|
|
7
7
|
## Credential ownership
|
|
8
8
|
|
|
9
|
-
The host
|
|
9
|
+
The host makes model calls and runs services such as web search and remote history, so most credentials belong in the host's environment or the host user's global configuration. Common cases:
|
|
10
10
|
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
| Operation | Credential owner |
|
|
11
|
+
| Operation | Where the credential belongs |
|
|
14
12
|
| --- | --- |
|
|
15
13
|
| Main-agent, subagent, sampling, and maintenance model calls | Session host |
|
|
16
14
|
| OpenAI Codex OAuth accounts | Session host home |
|
|
@@ -22,11 +20,11 @@ Common cases are:
|
|
|
22
20
|
| Telegram transcription and voice responses | Telegram runner |
|
|
23
21
|
| Standalone `tau tool` commands | The process running that command |
|
|
24
22
|
|
|
25
|
-
With local `tau`, these
|
|
23
|
+
With local `tau`, all of these are usually one machine. With `tau attach`, a key set only in the attached client's shell does not reach the remote host. Run `tau auth` on the host machine, and set host environment variables where `tau serve` or the SDK host runs. See [ownership and scope](ownership-and-scope.md) for the full boundary.
|
|
26
24
|
|
|
27
25
|
## Provider API keys
|
|
28
26
|
|
|
29
|
-
Tau accepts provider API keys in
|
|
27
|
+
Tau accepts provider API keys in global configuration:
|
|
30
28
|
|
|
31
29
|
```json
|
|
32
30
|
{
|
|
@@ -38,15 +36,15 @@ Tau accepts provider API keys in private global configuration:
|
|
|
38
36
|
}
|
|
39
37
|
```
|
|
40
38
|
|
|
41
|
-
|
|
39
|
+
The keys of the map are provider IDs, such as `openai`, not model IDs. `apiKeys` is allowed only in the global `~/.config/tau/config.json` of the process that uses it. Project values are rejected. Values are literal strings and do not expand environment variables.
|
|
42
40
|
|
|
43
|
-
For model
|
|
41
|
+
For model requests, a provider's environment variable wins over its entry in `apiKeys`. Cloud and workload identity authentication that the provider supports still works. OpenAI uses `OPENAI_API_KEY`. Anthropic also accepts `ANTHROPIC_AUTH_TOKEN` and `ANTHROPIC_OAUTH_TOKEN`. Codex OAuth is separate and always uses the active stored account.
|
|
44
42
|
|
|
45
|
-
Set model credentials where the host runs. Restart
|
|
43
|
+
Set model credentials where the host runs. Restart that process after changing its environment variables or its `apiKeys`.
|
|
46
44
|
|
|
47
45
|
## Feature-specific keys
|
|
48
46
|
|
|
49
|
-
|
|
47
|
+
Features check the environment variable first, then global configuration:
|
|
50
48
|
|
|
51
49
|
| Feature | Resolution order |
|
|
52
50
|
| --- | --- |
|
|
@@ -59,9 +57,9 @@ Feature helpers use environment variables first, then global configuration:
|
|
|
59
57
|
|
|
60
58
|
`web.discover` does not require Exa. `web.search` and `web.fetch` do. `/speak` and Telegram `/tts_on` voice responses require OpenAI for text rewriting and ElevenLabs for synthesis. `/listen` and incoming Telegram voice notes use Google, with optional OpenAI spelling hints. PDF OCR through `tau tool pdf-unpack` uses Mistral.
|
|
61
59
|
|
|
62
|
-
Set these
|
|
60
|
+
Set these on the process that runs the feature. For example, `/speak` in an attached TUI reads `OPENAI_API_KEY` and `ELEVENLABS_API_KEY` on the client machine, while a session that uses a Google model reads its key on the host.
|
|
63
61
|
|
|
64
|
-
For `tau tool` commands, credentials and configuration belong to the machine
|
|
62
|
+
For `tau tool` commands, credentials and configuration belong to the machine that runs the command. The agent's Bash tool removes inherited API-key environment variables, so a command the agent runs may need its key in global configuration on that machine. See [configuration](configuration.md) for configuration file locations and [security](security.md) for command environment handling.
|
|
65
63
|
|
|
66
64
|
## OpenAI Codex OAuth
|
|
67
65
|
|
|
@@ -71,9 +69,9 @@ The `openai-codex` provider uses ChatGPT Plus or Pro OAuth accounts managed by T
|
|
|
71
69
|
tau auth login codex
|
|
72
70
|
```
|
|
73
71
|
|
|
74
|
-
The flow opens or prints a browser URL
|
|
72
|
+
The flow opens or prints a browser URL. It may instead ask for a device code or a pasted redirect URL. Tau stores the result in the host user's `~/.config/tau/auth.json` with private file permissions. Do not edit this file directly. The auth commands handle concurrent access and token refresh.
|
|
75
73
|
|
|
76
|
-
|
|
74
|
+
Tau can store several Codex accounts, and at most one is active. `tau auth list` shows each identity, marks the active one, and shows usage windows for information, without revealing tokens.
|
|
77
75
|
|
|
78
76
|
```sh
|
|
79
77
|
tau auth login codex
|
|
@@ -82,11 +80,14 @@ tau auth use codex --account developer@example.com
|
|
|
82
80
|
tau auth logout codex --account developer@example.com
|
|
83
81
|
```
|
|
84
82
|
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
83
|
+
- A login activates the account only when no other accounts are stored. Later logins add or refresh an account without changing which one is active.
|
|
84
|
+
- `auth use` makes an account active and deactivates the previous one.
|
|
85
|
+
- Logout removes the account. Logging out the active account leaves no account active, even if others remain. Choose one with `tau auth use`.
|
|
86
|
+
- With no active account, requests fail with instructions to log in or select an account.
|
|
87
|
+
- Tau never switches accounts automatically, whether an account fails or runs out of usage. Usage never affects selection.
|
|
88
|
+
- Account IDs and emails match case-insensitively.
|
|
88
89
|
|
|
89
|
-
|
|
90
|
+
Every new request reads the current auth storage, in every session. Switching accounts takes effect without a host restart and does not affect a request already in progress.
|
|
90
91
|
|
|
91
92
|
## History and Nook indirection
|
|
92
93
|
|
|
@@ -109,7 +110,7 @@ History resolves its API key in this order:
|
|
|
109
110
|
2. The host environment variable named by `history.apiKeyEnv`
|
|
110
111
|
3. Inline `history.apiKey`
|
|
111
112
|
|
|
112
|
-
If `history` is configured but
|
|
113
|
+
If `history` is configured but no key is found, the host fails to start. Without `history`, history stays on the host machine. See [history](history.md) for service behavior.
|
|
113
114
|
|
|
114
115
|
A Nook Access service token uses an ID plus a secret:
|
|
115
116
|
|
|
@@ -123,11 +124,11 @@ A Nook Access service token uses an ID plus a secret:
|
|
|
123
124
|
}
|
|
124
125
|
```
|
|
125
126
|
|
|
126
|
-
If the named `accessClientSecretEnv` has a non-empty value, it wins over inline `accessClientSecret
|
|
127
|
+
If the variable named by `accessClientSecretEnv` has a non-empty value, it wins over inline `accessClientSecret`. Otherwise Tau uses the inline value. The process that performs the Nook operation reads the secret: the host for the session tool, and the CLI process for `tau nook` commands. Nook setup and destroy also accept the command flags and environment variables listed in [Nook](nook.md). See [Nook](nook.md).
|
|
127
128
|
|
|
128
129
|
## Hosted execution credentials
|
|
129
130
|
|
|
130
|
-
The Fly Sprite connection is host
|
|
131
|
+
The Fly Sprite connection is host configuration. It must be in place when the host starts, before a client asks for a Sprite session. The connection needs a token:
|
|
131
132
|
|
|
132
133
|
```json
|
|
133
134
|
{
|
|
@@ -138,18 +139,18 @@ The Fly Sprite connection is host-owned configuration. They must be available wh
|
|
|
138
139
|
}
|
|
139
140
|
```
|
|
140
141
|
|
|
141
|
-
|
|
142
|
+
An inline `token` wins when present. Otherwise Tau reads the variable named by `tokenEnv`. Session creation fails if neither gives a token.
|
|
142
143
|
|
|
143
|
-
|
|
144
|
+
The host reads these settings from its own startup configuration, never from an attached client. `/reload` does not reload them. Restart the host after changing the Sprite connection or its environment variables.
|
|
144
145
|
|
|
145
146
|
## Safe verification
|
|
146
147
|
|
|
147
|
-
|
|
148
|
+
Check a credential by using it, without printing its value:
|
|
148
149
|
|
|
149
|
-
- Run `tau auth list` to check Codex identities, active
|
|
150
|
-
- Restart the
|
|
150
|
+
- Run `tau auth list` to check Codex identities, the active account, refresh status, and usage windows.
|
|
151
|
+
- Restart the process that uses `apiKeys` after changing them.
|
|
151
152
|
- Make a small request with the intended persona to verify model authentication and endpoint access.
|
|
152
|
-
-
|
|
153
|
-
- For remote sessions, first confirm which machine is the host and which process
|
|
153
|
+
- After setting Exa, speech, history, Nook, or Fly credentials, use that feature. If a credential is missing, the error names where Tau looks for it.
|
|
154
|
+
- For remote sessions, first confirm which machine is the host and which process runs the feature.
|
|
154
155
|
|
|
155
|
-
Do not
|
|
156
|
+
Do not check by printing the environment, `config.json`, or `auth.json` into a transcript. If a secret ends up in shell history, logs, a session, or version control, rotate it at the provider and replace it. Broader handling guidance is in [security](security.md) and failure checks are in [troubleshooting](troubleshooting.md).
|
|
@@ -1,18 +1,18 @@
|
|
|
1
1
|
# Getting started
|
|
2
2
|
|
|
3
|
-
Tau is a terminal chat client that gives
|
|
3
|
+
Tau is a terminal chat client that gives AI agents tools for working in a project. The quickest way to learn it is a local session, where the terminal client, the session host, and the agent's execution environment all run on your machine. Remote sessions use the same three parts on different machines.
|
|
4
4
|
|
|
5
5
|
## Requirements
|
|
6
6
|
|
|
7
7
|
Tau supports macOS and Linux. Windows is not supported.
|
|
8
8
|
|
|
9
|
-
The published package requires Node.js 24 or newer. Tau runs
|
|
9
|
+
The published package requires Node.js 24 or newer. Tau runs every command in a fresh non-interactive login Bash process. Before installing, check that environment from the account that will run Tau:
|
|
10
10
|
|
|
11
11
|
```sh
|
|
12
12
|
bash -lc 'command -v node && node --version && command -v npm && npm --version'
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
The command should
|
|
15
|
+
The command should find both executables and finish without prompts, terminal errors, or extra startup output. Use the same check for any other executable you expect the agent to use.
|
|
16
16
|
|
|
17
17
|
## Install or upgrade Tau
|
|
18
18
|
|
|
@@ -22,14 +22,14 @@ Install the latest published version globally:
|
|
|
22
22
|
npm install -g @markusylisiurunen/tau@latest
|
|
23
23
|
```
|
|
24
24
|
|
|
25
|
-
Run the same command to upgrade. Then
|
|
25
|
+
Run the same command to upgrade. Then check which executable and version npm installed:
|
|
26
26
|
|
|
27
27
|
```sh
|
|
28
28
|
command -v tau
|
|
29
29
|
npm list -g @markusylisiurunen/tau --depth=0
|
|
30
30
|
```
|
|
31
31
|
|
|
32
|
-
The built-in documentation is
|
|
32
|
+
The built-in documentation is part of the package, so upgrading Tau also upgrades the documentation its agent reads. Tau also refreshes compatible model metadata in the background when a host that runs models starts. To refresh it without upgrading Tau, run:
|
|
33
33
|
|
|
34
34
|
```sh
|
|
35
35
|
tau models refresh
|
|
@@ -37,14 +37,14 @@ tau models refresh
|
|
|
37
37
|
|
|
38
38
|
## Set up a provider
|
|
39
39
|
|
|
40
|
-
A session needs credentials for the provider
|
|
40
|
+
A session needs credentials for the provider that its persona uses. Providers that use API keys read their usual environment variables. For example:
|
|
41
41
|
|
|
42
42
|
```sh
|
|
43
43
|
export ANTHROPIC_API_KEY='sk-ant-...'
|
|
44
44
|
tau
|
|
45
45
|
```
|
|
46
46
|
|
|
47
|
-
Common
|
|
47
|
+
Common choices are `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and `GEMINI_API_KEY`. You can also put keys in `apiKeys` in Tau configuration:
|
|
48
48
|
|
|
49
49
|
```json
|
|
50
50
|
{
|
|
@@ -54,29 +54,29 @@ Common built-in choices are `ANTHROPIC_API_KEY`, `OPENAI_API_KEY`, and `GEMINI_A
|
|
|
54
54
|
}
|
|
55
55
|
```
|
|
56
56
|
|
|
57
|
-
Put personal secrets in the global config at `~/.config/tau/config.json
|
|
57
|
+
Put personal secrets in the global config at `~/.config/tau/config.json`. A project file is likely to be committed. [Credentials](credentials.md) covers environment variables and which key wins for each feature.
|
|
58
58
|
|
|
59
|
-
The `openai-codex` provider
|
|
59
|
+
The `openai-codex` provider signs in with a ChatGPT subscription through OAuth. It does not use `OPENAI_API_KEY` or `apiKeys.openai`:
|
|
60
60
|
|
|
61
61
|
```sh
|
|
62
62
|
tau auth login codex
|
|
63
63
|
tau auth list
|
|
64
64
|
```
|
|
65
65
|
|
|
66
|
-
|
|
66
|
+
Manage this storage with the auth commands. Do not edit `~/.config/tau/auth.json` directly.
|
|
67
67
|
|
|
68
68
|
## Start a local session
|
|
69
69
|
|
|
70
|
-
Change to the project directory
|
|
70
|
+
Change to the project directory you want the agent to work in, then run Tau:
|
|
71
71
|
|
|
72
72
|
```sh
|
|
73
73
|
cd ~/Code/ledger-service
|
|
74
74
|
tau
|
|
75
75
|
```
|
|
76
76
|
|
|
77
|
-
Tau
|
|
77
|
+
Tau finds project configuration and content from that directory upward, loads the selected persona, creates a local session that is saved automatically, and opens the TUI. The agent's file and command tools start in this directory.
|
|
78
78
|
|
|
79
|
-
Type a request and press Enter.
|
|
79
|
+
Type a request and press Enter. Good first requests are concrete and limited in scope:
|
|
80
80
|
|
|
81
81
|
```text
|
|
82
82
|
Explain the request flow through this service and point to the key files.
|
|
@@ -86,29 +86,29 @@ Explain the request flow through this service and point to the key files.
|
|
|
86
86
|
Run the focused tests for the parser, fix the failure, and summarize the change.
|
|
87
87
|
```
|
|
88
88
|
|
|
89
|
-
Use `/help` inside the TUI to see interactive commands. Press `Ctrl+C` twice to exit. Tau
|
|
89
|
+
Use `/help` inside the TUI to see interactive commands. Press `Ctrl+C` twice to exit. Tau saves the session as you go, so there is nothing to save before exiting.
|
|
90
90
|
|
|
91
91
|
## Choose a persona and reasoning level
|
|
92
92
|
|
|
93
|
-
A **persona** selects a provider and model together with instructions, tools, skills, and default model settings. Tau ships built-in chat and coder personas and can load custom persona files.
|
|
93
|
+
A **persona** selects a provider and model, together with instructions, tools, skills, and default model settings. Tau ships built-in chat and coder personas and can load custom persona files.
|
|
94
94
|
|
|
95
|
-
|
|
95
|
+
To start with a specific persona, pass its exact id:
|
|
96
96
|
|
|
97
97
|
```sh
|
|
98
98
|
tau --persona gpt-6.1-sol-coder
|
|
99
99
|
```
|
|
100
100
|
|
|
101
|
-
Append a reasoning level when the
|
|
101
|
+
Append a reasoning level when the model supports it:
|
|
102
102
|
|
|
103
103
|
```sh
|
|
104
104
|
tau --persona gpt-6.1-sol-coder:high
|
|
105
105
|
```
|
|
106
106
|
|
|
107
|
-
The
|
|
107
|
+
The reasoning levels are `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, and `max`. A persona may offer only some of them in the TUI. Providers that do not support reasoning ignore the setting.
|
|
108
108
|
|
|
109
|
-
During a session, `/persona:<id>` changes the persona and `Shift+Tab` cycles the available reasoning levels. A
|
|
109
|
+
During a session, `/persona:<id>` changes the persona and `Shift+Tab` cycles through the available reasoning levels. A turn that is already running keeps the persona, reasoning, model, and tools it started with. Changes apply from the next turn.
|
|
110
110
|
|
|
111
|
-
To
|
|
111
|
+
To set a default for new sessions, use `defaultPersona`:
|
|
112
112
|
|
|
113
113
|
```json
|
|
114
114
|
{
|
|
@@ -116,28 +116,28 @@ To choose a default for new sessions, set `defaultPersona`:
|
|
|
116
116
|
}
|
|
117
117
|
```
|
|
118
118
|
|
|
119
|
-
See [personas](personas.md) for custom persona files and
|
|
119
|
+
See [personas](personas.md) for custom persona files and how inheritance works, and [models](models.md) for model catalog overrides.
|
|
120
120
|
|
|
121
|
-
## Inspect startup
|
|
121
|
+
## Inspect startup
|
|
122
122
|
|
|
123
|
-
Start with the
|
|
123
|
+
Start with the help output:
|
|
124
124
|
|
|
125
125
|
```sh
|
|
126
126
|
tau --help
|
|
127
127
|
```
|
|
128
128
|
|
|
129
|
-
Tau
|
|
129
|
+
Tau prints configuration and content warnings to stderr at startup. Each warning names the source path and the invalid field or entry. Tau continues with everything else it could load.
|
|
130
130
|
|
|
131
|
-
For a local startup, `--debug` shows the resources and tool schemas resolved for the
|
|
131
|
+
For a local startup, `--debug` shows the resources and tool schemas resolved for the current directory without opening the TUI:
|
|
132
132
|
|
|
133
133
|
```sh
|
|
134
134
|
tau --debug --persona gpt-6.1-sol-coder:high
|
|
135
135
|
```
|
|
136
136
|
|
|
137
|
-
Debug output can
|
|
137
|
+
Debug output can include project instructions and other text sent to the model, so check where it ends up before sharing it. It inspects only a local startup. It cannot show the effective state of a running remote host or an attached client.
|
|
138
138
|
|
|
139
|
-
After
|
|
139
|
+
After you edit configuration or content that the session loads, `/reload` refreshes it when no turn is running and reports warnings in the transcript. Changes to client settings or host startup settings need a restart of that process. [Configuration](configuration.md) explains which changes apply where.
|
|
140
140
|
|
|
141
141
|
## Continue from here
|
|
142
142
|
|
|
143
|
-
Read [ownership and scope](ownership-and-scope.md) before using `tau attach`, hosted execution environments, the SDK, or Telegram. For
|
|
143
|
+
Read [ownership and scope](ownership-and-scope.md) before using `tau attach`, hosted execution environments, the SDK, or Telegram. For everyday configuration, use [configuration](configuration.md) together with the [configuration reference](config-reference.md). [TUI](tui.md) covers daily use, and [sessions](sessions.md) explains saving, recovery, compaction, and rewind.
|