@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
|
@@ -15,24 +15,24 @@ The command requires `pdftoppm` from Poppler on `PATH`. On macOS, install it wit
|
|
|
15
15
|
|
|
16
16
|
## Input and examples
|
|
17
17
|
|
|
18
|
-
|
|
18
|
+
Give one local PDF path, relative to the current directory. Quote paths containing spaces:
|
|
19
19
|
|
|
20
20
|
```bash
|
|
21
21
|
tau tool pdf-unpack './docs/design review.pdf'
|
|
22
22
|
```
|
|
23
23
|
|
|
24
|
-
The command uploads the PDF to Mistral for OCR and renders page
|
|
24
|
+
The command uploads the PDF to Mistral for OCR and renders page images locally. Use it for a sensitive document only if you may send it to Mistral and keep the extracted files locally.
|
|
25
25
|
|
|
26
26
|
## Outputs and recovery
|
|
27
27
|
|
|
28
|
-
On success, stdout
|
|
28
|
+
On success, stdout prints the output directory, which is temporary but not deleted automatically, and lists every file. The directory contains:
|
|
29
29
|
|
|
30
30
|
- `document.md`: the complete OCR document with recognized tables inlined.
|
|
31
31
|
- `pages/page-0001.md` and later numbered files: one Markdown file per PDF page.
|
|
32
32
|
- `images/page-0001/patch-0001.png` and later numbered patches: images for visual verification.
|
|
33
33
|
|
|
34
|
-
OCR text can contain
|
|
34
|
+
OCR text can contain mistakes. Images and figures that are not captured in Markdown are marked with placeholders that point to the matching page patches. Read `document.md` for the whole document, use `pages/` for page-level work, and inspect `images/` before trusting or correcting uncertain OCR.
|
|
35
35
|
|
|
36
|
-
|
|
36
|
+
After OCR, the command tries to delete the uploaded file from Mistral and reports if that fails. The local output stays on disk; delete it when you no longer need it. If processing fails, Tau tries to remove the partial output directory. The error names the step that failed and says whether the partial output was removed. Partial output is never a complete result. If the failure happens after the OCR request started, the error warns that running the command again may be charged again.
|
|
37
37
|
|
|
38
|
-
See [command-line tools](tools.md) for
|
|
38
|
+
See [command-line tools](tools.md) for the other tools and where commands run.
|
|
@@ -1,12 +1,12 @@
|
|
|
1
1
|
# Personas
|
|
2
2
|
|
|
3
|
-
A persona
|
|
3
|
+
A persona defines how the agent works. It chooses a provider and model, supplies the base system prompt, sets reasoning and service tier, and selects tools. Switching persona changes how later turns run, in the same session.
|
|
4
4
|
|
|
5
|
-
Tau ships
|
|
5
|
+
Tau ships built-in personas and loads custom persona files from the execution environment. The available list depends on the Tau version and on where the session runs, so check the current list instead of relying on remembered 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
|
|
9
|
+
Built-in personas are generated from Tau's current model catalog. Most model families have separate chat and coder variants, and some have only the variants Tau supports. Built-ins come with Tau's own prompts, defaults, tool selections, and subagent 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,18 +16,18 @@ 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
|
-
Built-in personas are always included
|
|
19
|
+
Built-in personas are always included. A custom persona replaces a built-in by using the same ID.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
To see the current list:
|
|
22
22
|
|
|
23
23
|
```sh
|
|
24
24
|
tau --help
|
|
25
25
|
tau --debug
|
|
26
26
|
```
|
|
27
27
|
|
|
28
|
-
`tau --debug` also prints full
|
|
28
|
+
`tau --debug` also prints the full prompts and project context, so be careful where you share its output.
|
|
29
29
|
|
|
30
|
-
If no personas
|
|
30
|
+
If no personas are left, session creation fails. Reload also fails, so a running session never ends up without a persona.
|
|
31
31
|
|
|
32
32
|
## Discovery and precedence
|
|
33
33
|
|
|
@@ -36,15 +36,15 @@ Custom persona files are loaded from:
|
|
|
36
36
|
- `~/.config/tau/personas/<id>.md` when the session `cwd` is inside the execution environment's home;
|
|
37
37
|
- every ancestor `.tau/personas/<id>.md` from the broadest project level to the nearest.
|
|
38
38
|
|
|
39
|
-
|
|
39
|
+
Built-ins come first, global custom personas override them, and the nearest project definition wins. IDs are compared case-insensitively when deciding which definition overrides which. The `id` inside a file must still match its filename without `.md` exactly, including case.
|
|
40
40
|
|
|
41
41
|
For a session in `~/code/ledger/apps/api`, a project file at `~/code/ledger/apps/.tau/personas/release-coder.md` overrides the same ID from `~/code/ledger/.tau/personas/` or `~/.config/tau/personas/`.
|
|
42
42
|
|
|
43
|
-
These locations
|
|
43
|
+
These locations are on the execution environment. An attached TUI does not add persona files to a remote session. See [configuration](configuration.md) and [ownership and scope](ownership-and-scope.md).
|
|
44
44
|
|
|
45
45
|
## Persona file contract
|
|
46
46
|
|
|
47
|
-
A persona is Markdown with YAML frontmatter. `id`, `provider`, and `model` are required.
|
|
47
|
+
A persona is a Markdown file with YAML frontmatter. `id`, `provider`, and `model` are required. The Markdown body is required, must not be empty, and becomes the persona's base system prompt.
|
|
48
48
|
|
|
49
49
|
```markdown
|
|
50
50
|
---
|
|
@@ -70,7 +70,7 @@ tools:
|
|
|
70
70
|
Work as a release engineer. Inspect repository policy before changing release state.
|
|
71
71
|
```
|
|
72
72
|
|
|
73
|
-
The frontmatter must be a YAML object between
|
|
73
|
+
The frontmatter must be a YAML object between `---` lines. Unknown fields are ignored.
|
|
74
74
|
|
|
75
75
|
### Required fields
|
|
76
76
|
|
|
@@ -78,9 +78,9 @@ The frontmatter must be a YAML object between valid delimiters. Unknown fields a
|
|
|
78
78
|
| --- | --- |
|
|
79
79
|
| `id` | Non-empty persona ID. It must exactly match the filename without `.md`. |
|
|
80
80
|
| `provider` | Non-empty provider ID from the installed [model catalog](models.md). |
|
|
81
|
-
| `model` | Non-empty model ID for that provider.
|
|
81
|
+
| `model` | Non-empty model ID for that provider. It may be an ID missing from the catalog, as long as the provider is known. |
|
|
82
82
|
|
|
83
|
-
Each custom persona is
|
|
83
|
+
Each custom persona is complete on its own. It does not inherit a provider, model, prompt, or settings from another persona.
|
|
84
84
|
|
|
85
85
|
### Optional fields
|
|
86
86
|
|
|
@@ -89,18 +89,20 @@ Each custom persona is self-contained: it supplies its provider, model, prompt,
|
|
|
89
89
|
| `label` | Display label. A blank or omitted label falls back to `custom`. |
|
|
90
90
|
| `description` | Short catalog description. |
|
|
91
91
|
| `reasoning` | Default effort: `none`, `minimal`, `low`, `medium`, `high`, `xhigh`, or `max`. |
|
|
92
|
-
| `serviceTier` | `priority` or `flex`.
|
|
92
|
+
| `serviceTier` | `priority` or `flex`. Used only by `openai` and `openai-codex`. |
|
|
93
93
|
| `allowedReasoningLevels` | Array of reasoning efforts offered by the TUI selector. |
|
|
94
|
-
| `tools` |
|
|
94
|
+
| `tools` | List of persona-selectable tools. |
|
|
95
95
|
|
|
96
|
-
Every persona
|
|
96
|
+
Every persona can use all discovered skills. If a custom persona omits `tools`, Tau enables the standard tools and the subagent tools. A `tools` list without `spawn_agent` prevents the agent from starting subagents. See [skills](skills.md) and [subagents](subagents.md) for those contracts.
|
|
97
97
|
|
|
98
|
-
The
|
|
98
|
+
The selectable tool names are:
|
|
99
99
|
|
|
100
100
|
- `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, `mcp`, and `models`;
|
|
101
101
|
- `spawn_agent`, `send_input_to_agent`, `wait_for_agents`, `list_agents`, and `interrupt_agent`.
|
|
102
102
|
|
|
103
|
-
|
|
103
|
+
Names such as `web`, `nook`, `history`, `mcp`, and `models` enable capabilities inside the `code` tool, and `bash` also enables `tau.bash`. Tau builds the `code` tool from whichever of these capabilities are selected and usable.
|
|
104
|
+
|
|
105
|
+
A `tools` list replaces the defaults. Names are lowercased and duplicates removed. An unknown name makes the persona invalid. `tools: []` gives the persona none of these tools. The built-in `tau_docs` tool is always available, independent of this list. `nook` works only when Nook is configured, and `mcp` only when the host has enabled MCP servers. [Tools](tools.md) explains eligibility and ownership.
|
|
104
106
|
|
|
105
107
|
## Selecting a persona
|
|
106
108
|
|
|
@@ -112,7 +114,7 @@ The service selectors enable capabilities within `code`; `bash` also enables `ta
|
|
|
112
114
|
}
|
|
113
115
|
```
|
|
114
116
|
|
|
115
|
-
The most specific
|
|
117
|
+
The most specific `defaultPersona` wins. The ID must match exactly, including case. An unknown default produces a warning, and Tau uses the first available persona.
|
|
116
118
|
|
|
117
119
|
Override the default for one TUI launch:
|
|
118
120
|
|
|
@@ -128,25 +130,25 @@ Inside the TUI, switch while idle with:
|
|
|
128
130
|
/persona:release-coder
|
|
129
131
|
```
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
This command matches the ID case-insensitively. `Ctrl+P` cycles through the available personas. A switch reloads configuration and content from the execution environment, applies the new persona, rebuilds project and skill context and the tool set, and saves the new session settings. The TUI refuses to switch while a turn is running.
|
|
132
134
|
|
|
133
135
|
## Reasoning and service tier
|
|
134
136
|
|
|
135
|
-
`reasoning` is the persona's default effort. A startup suffix, the session reasoning command, or `Shift+Tab` can override it.
|
|
137
|
+
`reasoning` is the persona's default effort. A startup suffix, the session reasoning command, or `Shift+Tab` can override it. You can change reasoning while a turn is running, but the running turn keeps the model and tool settings it started with. The new effort applies from the next submitted or queued turn.
|
|
136
138
|
|
|
137
|
-
`allowedReasoningLevels`
|
|
139
|
+
`allowedReasoningLevels` sets which values the TUI cycles through for the persona. It limits only the TUI selector; protocol clients can still set other levels. When it is omitted, the TUI offers all standard levels for a model that supports reasoning. For a model whose catalog entry says `reasoning: false`, the selector shows only `none`.
|
|
138
140
|
|
|
139
141
|
An empty `allowedReasoningLevels` does not create an empty selector. The TUI uses its normal model-aware choices.
|
|
140
142
|
|
|
141
|
-
`serviceTier` is
|
|
143
|
+
`serviceTier` is sent with OpenAI and OpenAI Codex requests. `priority` requests the provider's priority service, and `flex` requests flex service. Whether the tier is available, how it is billed, and whether requests are rejected depend on your provider account. Other providers ignore this setting.
|
|
142
144
|
|
|
143
145
|
## Reloading changes
|
|
144
146
|
|
|
145
|
-
|
|
147
|
+
After editing personas, skills, or project context, run `/reload` while the session is idle. Reload finds personas again and rebuilds the session's prompt and tools.
|
|
146
148
|
|
|
147
|
-
If the current persona ID still exists, Tau applies its newly loaded definition. This can reset
|
|
149
|
+
If the current persona ID still exists, Tau applies its newly loaded definition. This can reset settings such as reasoning or service tier to the definition's values. If the ID is gone, Tau selects the first available persona. Existing messages stay as they are; a persona change never rewrites earlier history.
|
|
148
150
|
|
|
149
|
-
|
|
151
|
+
The TUI refuses to reload while a turn is running. Subagents that are already running keep the setup they started with. Subagents started after the reload use the reloaded persona. See [subagents](subagents.md).
|
|
150
152
|
|
|
151
153
|
## Validation and common mistakes
|
|
152
154
|
|
|
@@ -159,4 +161,4 @@ An invalid persona is skipped and reported as a configuration warning. Other val
|
|
|
159
161
|
- an invalid reasoning effort or service tier;
|
|
160
162
|
- an unknown persona tool.
|
|
161
163
|
|
|
162
|
-
`/reload`
|
|
164
|
+
`/reload` shows warnings, with file paths, in the transcript. For a new local session, `tau --debug --persona <id>` shows the selected model, settings, skills, subagents, tools, and the complete prompt. If an edit seems to have no effect in a remote session, confirm the session's execution environment and `cwd` before editing another copy of the file. [Troubleshooting](troubleshooting.md) covers that check in more detail.
|
|
@@ -1,12 +1,16 @@
|
|
|
1
1
|
# Prompts and project context
|
|
2
2
|
|
|
3
|
-
Tau has
|
|
3
|
+
Tau has three ways to add instructions or reusable text to a session, and each enters at a different point:
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
- Prompt templates fill the editor when you ask for them.
|
|
6
|
+
- `AGENTS.md` files give standing project instructions.
|
|
7
|
+
- Hidden system blocks at the start of a user message add instructions for that one message.
|
|
8
|
+
|
|
9
|
+
None of these choose models or tools. [Personas](personas.md) set the base system prompt, model settings, and tools. Model-specific system notices are configured separately in the [configuration reference](config-reference.md).
|
|
6
10
|
|
|
7
11
|
## Prompt templates fill the editor
|
|
8
12
|
|
|
9
|
-
A prompt template is saved Markdown that Tau inserts into the TUI editor
|
|
13
|
+
A prompt template is saved Markdown that Tau inserts into the TUI editor, where you can review and send it. It is never added to the system prompt and never runs by itself.
|
|
10
14
|
|
|
11
15
|
Tau discovers prompt files from:
|
|
12
16
|
|
|
@@ -15,9 +19,9 @@ Tau discovers prompt files from:
|
|
|
15
19
|
| Global | `~/.config/tau/prompts/<id>.md` |
|
|
16
20
|
| Project | `<level>/.tau/prompts/<id>.md` |
|
|
17
21
|
|
|
18
|
-
The global location
|
|
22
|
+
The global location applies only when the session's working directory is inside the execution environment's home directory. Tau searches project levels from the working directory up to home, or up to the filesystem root when outside home. The nearest project definition wins over parent and global ones. Prompt IDs are compared case-insensitively, both for precedence and for lookup.
|
|
19
23
|
|
|
20
|
-
A prompt's ID is its filename without `.md`. Each file
|
|
24
|
+
A prompt's ID is its filename without `.md`. Each file needs YAML frontmatter with a non-empty `label`. For example, `release-summary.md`:
|
|
21
25
|
|
|
22
26
|
```markdown
|
|
23
27
|
---
|
|
@@ -27,9 +31,9 @@ label: release summary
|
|
|
27
31
|
Summarize the changes since the previous release. Separate user-visible changes from internal maintenance, and call out any migration steps.
|
|
28
32
|
```
|
|
29
33
|
|
|
30
|
-
The
|
|
34
|
+
The `label` appears in TUI autocomplete and in the Telegram prompt picker. Unknown frontmatter fields are ignored. The Markdown body is the text inserted into the editor.
|
|
31
35
|
|
|
32
|
-
Only files ending in lowercase `.md` are
|
|
36
|
+
Only files ending in lowercase `.md` are found. Tau skips a file with a warning if its YAML is invalid, its frontmatter is not an object, or its label is missing or invalid.
|
|
33
37
|
|
|
34
38
|
### Invoke a prompt
|
|
35
39
|
|
|
@@ -39,42 +43,42 @@ In the TUI, invoke a prompt by ID:
|
|
|
39
43
|
/prompt:release-summary
|
|
40
44
|
```
|
|
41
45
|
|
|
42
|
-
Tau replaces the
|
|
46
|
+
Tau replaces the editor text with the template body. It does not send the text, so you can edit it first. Lookup is case-insensitive.
|
|
43
47
|
|
|
44
|
-
The session
|
|
48
|
+
The session stores only each prompt's ID and label. Tau reads the body from the execution environment each time `/prompt:<id>` runs. As a result:
|
|
45
49
|
|
|
46
|
-
-
|
|
47
|
-
-
|
|
50
|
+
- An edit to the body of a known prompt takes effect on its next use, without `/reload`.
|
|
51
|
+
- After adding, removing, or renaming a prompt, or changing its label, run `/reload` before autocomplete shows the change.
|
|
48
52
|
|
|
49
|
-
If the file is missing or invalid when Tau
|
|
53
|
+
If the file is missing or invalid when Tau reads it, the command fails. Tau never falls back to an older copy of the body. An attached client always gets the prompt from the session's execution environment, never from a file with the same name on the client machine.
|
|
50
54
|
|
|
51
55
|
### Telegram prompt picker
|
|
52
56
|
|
|
53
|
-
In [Telegram](telegram.md), `/prompt` lists the active session
|
|
57
|
+
In [Telegram](telegram.md), `/prompt` lists the active session's saved prompts, split into pages when there are many. Selecting one reads its current body and adds it to the session as a user message, without starting a turn. You can select a prompt only while the session is idle. Otherwise, wait for Tau to finish or use `/interrupt` first.
|
|
54
58
|
|
|
55
|
-
After
|
|
59
|
+
After a prompt is added, the picker's buttons stop working and it shows the prompt text, split across more messages if needed. Send a normal message, such as details or “go”, to start the next turn with the prompt in context. In groups, that message must mention the bot as usual. Selecting another prompt adds another message; it does not replace the first. Added prompts survive session recovery.
|
|
56
60
|
|
|
57
|
-
Only the newest picker in a chat
|
|
61
|
+
Only the newest picker in a chat works. A picker belongs to the session that opened it and expires after a selection, when the session is replaced, or when the runner restarts. Tapping twice does not add the prompt twice. Selecting a prompt does not use up pending attachments or group context.
|
|
58
62
|
|
|
59
63
|
## `AGENTS.md` provides standing context
|
|
60
64
|
|
|
61
|
-
`AGENTS.md`
|
|
65
|
+
`AGENTS.md` files are added to the system prompt as project context. Use them for repository conventions, architecture boundaries, verification commands, and other instructions that apply to every request in the project.
|
|
62
66
|
|
|
63
|
-
Tau
|
|
67
|
+
Tau always reads `AGENTS.md` from the execution environment, also in a local session.
|
|
64
68
|
|
|
65
69
|
### Ancestor files are included in full
|
|
66
70
|
|
|
67
71
|
Starting at the session working directory, Tau checks each ancestor for `AGENTS.md`. When the working directory is inside home, the walk stops at home and includes home itself. Otherwise it stops at the filesystem root.
|
|
68
72
|
|
|
69
|
-
|
|
73
|
+
Each file found is included in full, nearest first, followed by those in parent directories. The agent sees both local and broader instructions. When they conflict, the more specific project guidance takes priority, within the agent's overall instruction hierarchy.
|
|
70
74
|
|
|
71
|
-
A
|
|
75
|
+
A file is included only if it resolves to a real file named exactly `AGENTS.md`, in a directory that is a parent or a subdirectory of the working directory. When the working directory is inside home, the resolved file must also be inside home. These checks stop a symlink from pulling in unrelated instructions from outside the session's directories.
|
|
72
76
|
|
|
73
77
|
### Descendant files are listed by path
|
|
74
78
|
|
|
75
|
-
Tau also
|
|
79
|
+
Tau also looks below the working directory for nested `AGENTS.md` files. Their contents are not added automatically. Tau lists only their paths, so the agent knows more specific instructions exist and can read the right file before working in that subdirectory.
|
|
76
80
|
|
|
77
|
-
The scan is breadth-first, visits at most 8,192 directories, and
|
|
81
|
+
The scan is breadth-first, visits at most 8,192 directories, and goes at most 16 levels deep. It follows only directories whose resolved path stays under the working directory, and it does not loop on symlink cycles.
|
|
78
82
|
|
|
79
83
|
Tau skips these directory names at every level:
|
|
80
84
|
|
|
@@ -84,14 +88,14 @@ Tau skips these directory names at every level:
|
|
|
84
88
|
target vendor venv
|
|
85
89
|
```
|
|
86
90
|
|
|
87
|
-
When
|
|
91
|
+
When the scan starts at the home directory itself, Tau also skips these tool-managed directories directly under home:
|
|
88
92
|
|
|
89
93
|
```text
|
|
90
94
|
.bun .cargo .config .deno .gradle .local .m2 .npm .nvm
|
|
91
95
|
.pnpm-store .rustup .sdkman .yarn
|
|
92
96
|
```
|
|
93
97
|
|
|
94
|
-
It
|
|
98
|
+
It also skips `Library` directly under home on macOS, and `snap` on Linux. A directory with one of these names elsewhere is still scanned.
|
|
95
99
|
|
|
96
100
|
## Disable project context
|
|
97
101
|
|
|
@@ -101,45 +105,43 @@ Start Tau with:
|
|
|
101
105
|
tau --no-agent-context-files
|
|
102
106
|
```
|
|
103
107
|
|
|
104
|
-
This
|
|
108
|
+
This turns off both the included `AGENTS.md` files and the list of nested ones. Personas, prompt templates, and [skills](skills.md) still work.
|
|
105
109
|
|
|
106
|
-
The option
|
|
110
|
+
The option works for local TUI sessions and for hosts started with `tau serve`. In the Node SDK, `noAgentContextFiles: true` does the same for the host. An attached client cannot change this for a session that already exists on a remote host.
|
|
107
111
|
|
|
108
112
|
## Alternate subagent working directories
|
|
109
113
|
|
|
110
|
-
A subagent normally
|
|
111
|
-
|
|
112
|
-
The alternate directory controls:
|
|
114
|
+
A subagent normally uses the parent session's working directory and context. When `spawn_agent` sets a different `workingDirectory`, Tau rebuilds the parts of the context that depend on the directory:
|
|
113
115
|
|
|
114
|
-
-
|
|
115
|
-
-
|
|
116
|
-
-
|
|
116
|
+
- environment and repository details
|
|
117
|
+
- the applicable `AGENTS.md` files
|
|
118
|
+
- the skills found from that directory
|
|
117
119
|
|
|
118
|
-
The
|
|
120
|
+
The persona, model catalog, model settings, and tool policy still come from the parent session. A persona file in the other directory is not used. See [subagents](subagents.md) for details.
|
|
119
121
|
|
|
120
122
|
## Leading hidden system blocks
|
|
121
123
|
|
|
122
|
-
Tau recognizes one or more
|
|
124
|
+
Tau recognizes one or more `<system>...</system>` blocks only when they start a user message and each closing tag is followed by a newline:
|
|
123
125
|
|
|
124
126
|
```text
|
|
125
127
|
<system>Use the deployment checklist for this response.</system>
|
|
126
128
|
Prepare the staging release.
|
|
127
129
|
```
|
|
128
130
|
|
|
129
|
-
The
|
|
131
|
+
The whole message is saved and sent to the model. When Tau displays the message, it hides the recognized blocks and shows the rest. A block anywhere else in the message, a malformed block, or a closing tag without the newline is shown as ordinary text.
|
|
130
132
|
|
|
131
|
-
|
|
133
|
+
Integrations can use this to give the model instructions for one message without showing them as the user's words. The blocks are not secret and do not control access: they are saved in the session and sent to the model. Put project-wide guidance in `AGENTS.md` and lasting persona behavior in the persona's system prompt.
|
|
132
134
|
|
|
133
135
|
## Reload and verify context
|
|
134
136
|
|
|
135
|
-
Run `/reload` in an idle
|
|
137
|
+
Run `/reload` in an idle session after changing prompts, skills, personas, configuration, or project context files. Reload reads everything again and rebuilds the system prompt for the active persona. It reports configuration warnings and how much content it loaded. Reload is refused while a turn is running.
|
|
136
138
|
|
|
137
|
-
For a new local
|
|
139
|
+
For a new local session, debug mode prints the discovered content, the paths of loaded context files, tool schemas, and the system prompt, then exits:
|
|
138
140
|
|
|
139
141
|
```bash
|
|
140
142
|
tau --debug --persona release-coder
|
|
141
143
|
```
|
|
142
144
|
|
|
143
|
-
Add `--no-agent-context-files` to
|
|
145
|
+
Add `--no-agent-context-files` to see the result without project context. Debug mode works only for TUI startup, not with `tau serve`.
|
|
144
146
|
|
|
145
|
-
If expected context is missing,
|
|
147
|
+
If expected context is missing, check the `cwd` and `home` of the execution environment, not the attached client's current directory. Then check exact filenames, the path rules above, scan exclusions, and reload warnings. See [troubleshooting](troubleshooting.md) for broader diagnostics.
|