@markusylisiurunen/tau 0.3.91 → 0.3.93

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.
Files changed (75) hide show
  1. package/dist/core/cli.js +0 -3
  2. package/dist/core/cli.js.map +1 -1
  3. package/dist/core/code_mode/sdk.js +0 -1
  4. package/dist/core/code_mode/sdk.js.map +1 -1
  5. package/dist/core/config/content_loader.js +1 -3
  6. package/dist/core/config/content_loader.js.map +1 -1
  7. package/dist/core/config/index.js +1 -1
  8. package/dist/core/config/index.js.map +1 -1
  9. package/dist/core/config/schema.js +0 -67
  10. package/dist/core/config/schema.js.map +1 -1
  11. package/dist/core/index.js +0 -1
  12. package/dist/core/index.js.map +1 -1
  13. package/dist/core/models/openrouter.js +6 -0
  14. package/dist/core/models/openrouter.js.map +1 -1
  15. package/dist/core/personas.js +30 -4
  16. package/dist/core/personas.js.map +1 -1
  17. package/dist/core/static/tau_docs/config-reference.md +0 -24
  18. package/dist/core/static/tau_docs/configuration.md +1 -1
  19. package/dist/core/static/tau_docs/credentials.md +3 -18
  20. package/dist/core/static/tau_docs/index.md +0 -1
  21. package/dist/core/static/tau_docs/manifest.json +0 -1
  22. package/dist/core/static/tau_docs/openrouter.md +1 -0
  23. package/dist/core/static/tau_docs/personas.md +4 -4
  24. package/dist/core/static/tau_docs/security.md +6 -18
  25. package/dist/core/static/tau_docs/subagents.md +0 -1
  26. package/dist/core/static/tau_docs/tools.md +6 -8
  27. package/dist/core/static/tau_docs/troubleshooting.md +10 -12
  28. package/dist/core/static/tau_docs/tui.md +1 -0
  29. package/dist/core/subagents/claude_code_runner.mjs +43 -43
  30. package/dist/core/subagents/registry.js +1 -2
  31. package/dist/core/subagents/registry.js.map +1 -1
  32. package/dist/core/subagents/types.js +1 -2
  33. package/dist/core/subagents/types.js.map +1 -1
  34. package/dist/core/telegram/workspace.js +1 -1
  35. package/dist/core/telegram/workspace.js.map +1 -1
  36. package/dist/core/tools/code.js +0 -3
  37. package/dist/core/tools/code.js.map +1 -1
  38. package/dist/core/tools/presentation.js +1 -2
  39. package/dist/core/tools/presentation.js.map +1 -1
  40. package/dist/core/tools/tool_names.js +1 -3
  41. package/dist/core/tools/tool_names.js.map +1 -1
  42. package/dist/core/utils/speech.js +6 -2
  43. package/dist/core/utils/speech.js.map +1 -1
  44. package/dist/core/version.js +1 -1
  45. package/dist/diff_tool/app/dist/assets/{core-DVIaxTZj.js → core-DaUcjNBm.js} +1 -1
  46. package/dist/diff_tool/app/dist/assets/{highlights-BKf96Xcr.js → highlights-ey_YWY7Q.js} +1 -1
  47. package/dist/diff_tool/app/dist/assets/{index-DKDNDuYd.js → index-B7CqEx6P.js} +19 -19
  48. package/dist/diff_tool/app/dist/assets/langs-BAlu0Oiy.js +1 -0
  49. package/dist/diff_tool/app/dist/assets/{shiki-DmA--L4w.js → shiki-BDtWTy6K.js} +2 -2
  50. package/dist/diff_tool/app/dist/assets/{stream-tokenizer-5ezp0vCr.js → stream-tokenizer-Dpnp6Te1.js} +1 -1
  51. package/dist/diff_tool/app/dist/assets/{themes-BNoMSXBX.js → themes-snQUZ0v5.js} +2 -2
  52. package/dist/diff_tool/app/dist/index.html +1 -1
  53. package/dist/main.js +0 -23
  54. package/dist/main.js.map +1 -1
  55. package/package.json +4 -5
  56. package/dist/core/code_mode/nook.js +0 -226
  57. package/dist/core/code_mode/nook.js.map +0 -1
  58. package/dist/core/nook/cli.js +0 -258
  59. package/dist/core/nook/cli.js.map +0 -1
  60. package/dist/core/nook/client.js +0 -372
  61. package/dist/core/nook/client.js.map +0 -1
  62. package/dist/core/nook/deploy.js +0 -152
  63. package/dist/core/nook/deploy.js.map +0 -1
  64. package/dist/core/nook/index.js +0 -5
  65. package/dist/core/nook/index.js.map +0 -1
  66. package/dist/core/nook/setup.js +0 -429
  67. package/dist/core/nook/setup.js.map +0 -1
  68. package/dist/core/nook/validation.js +0 -164
  69. package/dist/core/nook/validation.js.map +0 -1
  70. package/dist/core/static/code_mode/nook/documentation.md +0 -144
  71. package/dist/core/static/code_mode/nook/sandbox_runner.mjs +0 -1
  72. package/dist/core/static/tau_docs/nook.md +0 -270
  73. package/dist/diff_tool/app/dist/assets/langs-D3RgqfNW.js +0 -1
  74. package/dist/nook/worker/index.js +0 -1175
  75. package/dist/nook/worker/index.js.map +0 -1
@@ -30,7 +30,6 @@ Project and global content can change which persona ids exist. A configured defa
30
30
  | `subagents` | Object | Global, project | Most-specific `launchModels` list | Session runtime; `/reload` or new session |
31
31
  | `modelSystemNotices` | String map | Global, project | Merge by model target | Session runtime; `/reload`, affects later inputs |
32
32
  | `flySprites` | Object | Global, project | Merge connection fields | Host startup; host restart |
33
- | `nook` | Object | Global, project | Most-specific complete object | Host tool runtime; `/reload` or new session |
34
33
  | `history` | Object | Global only | One global object | Host startup; host restart |
35
34
  | `mcpServers` | Object keyed by server name | Global and project | Merge names; nearer entry replaces | Host startup; host restart |
36
35
 
@@ -180,29 +179,6 @@ Speech uses Eleven v4 Turbo, the delivery note `[Brisk but relaxed, speaking nat
180
179
 
181
180
  The TUI reads these speech settings from its own client configuration, including project configuration discovered from its startup directory, also when attached to a remote host. It does not load vocabulary from the remote session's repository. Telegram reads it from the runner's startup configuration, not from session workspaces. Restart the respective process after changes. This setting does not affect the explicit voices supplied to `tau tool speech-generate`.
182
181
 
183
- ### `nook`
184
-
185
- Connection details for one existing Nook deployment:
186
-
187
- | Nested field | Type | Required | Contract |
188
- | --- | --- | --- | --- |
189
- | `domain` | Non-empty string | Yes | DNS hostname, optionally supplied as a plain `http://` or `https://` origin with no port, path, query, credentials, or fragment |
190
- | `accessClientId` | Non-empty string | No | Cloudflare Access service-token client id |
191
- | `accessClientSecret` | Non-empty string | No | Inline service-token secret |
192
- | `accessClientSecretEnv` | Non-empty string | No | Host environment variable containing the secret |
193
-
194
- ```json
195
- {
196
- "nook": {
197
- "domain": "apps.example.com",
198
- "accessClientId": "8f0c...access",
199
- "accessClientSecretEnv": "NOOK_ACCESS_CLIENT_SECRET"
200
- }
201
- }
202
- ```
203
-
204
- Tau normalizes the domain to a lowercase hostname. A non-empty value from `accessClientSecretEnv` wins over `accessClientSecret`. The `nook` tool is available only when the active persona allows it and the effective configuration contains this object. See [Nook](nook.md).
205
-
206
182
  ### `history`
207
183
 
208
184
  A global-only remote history target:
@@ -180,7 +180,7 @@ The Telegram runner loads its speech provider and its runner config at startup.
180
180
 
181
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.
182
182
 
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.
183
+ **Expecting nested objects to deep-merge.** A nearer `mcpServers` entry replaces the whole entry with the same name, including its credentials. Repeat every setting the entry needs.
184
184
 
185
185
  **Expecting `/reload` to restart the client or server.** Reload affects only the current session. Restart the process that reads the setting at startup.
186
186
 
@@ -15,7 +15,6 @@ The host makes model calls and runs services such as web search and remote histo
15
15
  | OpenAI Codex OAuth accounts | Session host home |
16
16
  | Exa-backed `web.search` and `web.fetch` | Session host |
17
17
  | Remote history replication and queries | Session host |
18
- | Nook host tool | Session host |
19
18
  | Fly Sprite API | Session host startup |
20
19
  | `/listen` and `/speak` | TUI client |
21
20
  | Telegram transcription and voice responses | Telegram runner |
@@ -113,9 +112,9 @@ tau auth logout codex --account developer@example.com
113
112
 
114
113
  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.
115
114
 
116
- ## History and Nook indirection
115
+ ## History indirection
117
116
 
118
- History and Nook can name environment variables instead of embedding secrets in configuration.
117
+ History can name environment variables instead of embedding secrets in configuration.
119
118
 
120
119
  Remote history is global-only configuration:
121
120
 
@@ -136,20 +135,6 @@ History resolves its API key in this order:
136
135
 
137
136
  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.
138
137
 
139
- A Nook Access service token uses an ID plus a secret:
140
-
141
- ```json
142
- {
143
- "nook": {
144
- "domain": "apps.example.net",
145
- "accessClientId": "service-token-id.access",
146
- "accessClientSecretEnv": "NOOK_ACCESS_CLIENT_SECRET"
147
- }
148
- }
149
- ```
150
-
151
- 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).
152
-
153
138
  ## Hosted execution credentials
154
139
 
155
140
  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:
@@ -174,7 +159,7 @@ Check a credential by using it, without printing its value:
174
159
  - Run `tau auth list` to check Codex identities, the active account, refresh status, and usage windows.
175
160
  - Restart the process that uses `apiKeys` after changing them.
176
161
  - Make a small request with the intended persona to verify model authentication and endpoint access.
177
- - 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.
162
+ - After setting Exa, speech, history, or Fly credentials, use that feature. If a credential is missing, the error names where Tau looks for it.
178
163
  - For remote sessions, first confirm which machine is the host and which process runs the feature.
179
164
 
180
165
  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).
@@ -35,7 +35,6 @@ These pages describe how to install, configure, operate, and integrate the versi
35
35
  - [Sessions](sessions.md): creating sessions, turns, queueing, compaction, rewind, recovery, and storage.
36
36
  - [Remote sessions](remote-sessions.md): `serve`, `attach`, remote paths, and authentication.
37
37
  - [History](history.md): searchable local history, optional remote replication, and the history tool.
38
- - [Nook](nook.md): setting up and running the optional static mini-app platform.
39
38
  - [Telegram](telegram.md): running the Telegram runner, bot access, chat commands, attachments, and recovery.
40
39
  - [Telegram projects and workspaces](telegram-projects.md): repository, persistent-directory, and composite projects, workspace lifecycle, and provision hooks.
41
40
 
@@ -25,7 +25,6 @@
25
25
  "node-sdk.md",
26
26
  "sdk-diff-review.md",
27
27
  "history.md",
28
- "nook.md",
29
28
  "telegram.md",
30
29
  "telegram-projects.md",
31
30
  "security.md",
@@ -30,6 +30,7 @@ Every request needs an exact `--model` ID from this table. There is no default,
30
30
  | `decisions` | `typesafe/jev-1.14` | Questions about text, structured state, or images; use for high-volume decisions when cost is the priority | Not supported |
31
31
  | `chat` | `google/gemini-3.8-flash` | Text, images, audio, video; first choice for audio/video and image-heavy analysis | `low`, `medium`, `high` |
32
32
  | `chat` | `openai/gpt-6-luna` | Text and images; cheap everyday extraction, summarization, and routine questions | `none`, `low`, `medium`, `high`, `xhigh`, `max` |
33
+ | `chat` | `openai/gpt-6.1-terra` | Text and images; efficient visual reasoning, writing, and everyday coding | `low`, `medium`, `high`, `xhigh`, `max` |
33
34
  | `chat` | `openai/gpt-6.1-sol` | Text and images; coding, debugging, technical reasoning | `low`, `medium`, `high`, `xhigh`, `max` |
34
35
  | `chat` | `anthropic/claude-opus-5.5` | Text and images; premium generalist for writing, synthesis, difficult reasoning, and second opinions | `low`, `medium`, `high`, `xhigh`, `max` |
35
36
 
@@ -10,7 +10,7 @@ Built-in personas are generated from Tau's current model catalog. Most model fam
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
 
13
- GPT-6.1 Sol, GPT-6 Luna, and GPT-6 Astra have API and ChatGPT variants for chat and coding. Fast ChatGPT variants use priority service and are available only for coding. They are available only when the effective catalog contains the matching model ID (`gpt-6.1-sol`, `gpt-6-luna`, or `gpt-6-astra`) for the corresponding provider.
13
+ GPT-6.1 Sol, GPT-6.1 Terra, GPT-6 Luna, and GPT-6 Astra have API and ChatGPT variants for chat and coding. Fast ChatGPT variants use priority service and are available only for coding. They are available only when the effective catalog contains the matching model ID (`gpt-6.1-sol`, `gpt-6.1-terra`, `gpt-6-luna`, or `gpt-6-astra`) for the corresponding provider.
14
14
 
15
15
  All built-in personas default to medium reasoning. The startup default is `sonnet-5.5-coder`.
16
16
 
@@ -97,12 +97,12 @@ Every persona can use all discovered skills. If a custom persona omits `tools`,
97
97
 
98
98
  The selectable tool names are:
99
99
 
100
- - `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, `mcp`, and `models`;
100
+ - `bash`, `write`, `edit`, `view_image`, `web`, `history`, `mcp`, and `models`;
101
101
  - `spawn_agent`, `send_input_to_agent`, `wait_for_agents`, `list_agents`, and `interrupt_agent`.
102
102
 
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.
103
+ Names such as `web`, `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
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.
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. `mcp` works only when the host has enabled MCP servers. [Tools](tools.md) explains eligibility and ownership.
106
106
 
107
107
  ## Selecting a persona
108
108
 
@@ -30,7 +30,7 @@ Trusting a repository therefore means trusting this content. Before using a repo
30
30
 
31
31
  - persona system prompts, tool lists, and model launch allowlists;
32
32
  - skill instructions and any scripts they direct the agent to run;
33
- - project configuration that sets Nook targets, model notices, or hosted-environment connections;
33
+ - project configuration that sets model notices or hosted-environment connections;
34
34
  - `enabledClientTools`, which can turn on commands from your global configuration; and
35
35
  - provision scripts or other repository automation used by integrations such as Telegram.
36
36
 
@@ -46,7 +46,7 @@ A Tau host that runs models refreshes compatible provider catalogs from `pi.dev`
46
46
 
47
47
  ## Keep secrets with the process that needs them
48
48
 
49
- Most model and service credentials belong on the host, because the host makes model calls, web searches, history replication, and Nook requests for the session tool. TUI speech credentials and command client tool credentials belong on the client. Telegram bot, transcription, and voice credentials belong to the Telegram runner. Credentials for hosted execution environments belong in the host's startup configuration.
49
+ Most model and service credentials belong on the host, because the host makes model calls, performs web searches, and replicates history. TUI speech credentials and command client tool credentials belong on the client. Telegram bot, transcription, and voice credentials belong to the Telegram runner. Credentials for hosted execution environments belong in the host's startup configuration.
50
50
 
51
51
  When attached to a remote host, a credential exported on the laptop does not reach the host. Putting a host credential into the execution environment's shell would needlessly expose it to every process there. See [credentials](credentials.md) for which source wins.
52
52
 
@@ -57,12 +57,11 @@ Never put credentials in:
57
57
  - committed project files;
58
58
  - persona, prompt, skill, `AGENTS.md`, or model-notice text;
59
59
  - Bash command lines likely to enter shell history or process listings;
60
- - tool results, session messages, issue comments, or debug output; or
61
- - Nook static assets or browser KV.
60
+ - tool results, session messages, issue comments, or debug output.
62
61
 
63
62
  Do not debug authentication by printing an environment, a configuration file, `auth.json`, or a service response that includes headers. Check that the expected source is set up for the right process, then run a small operation that uses it. `tau auth list` shows Codex account identities and status without showing tokens.
64
63
 
65
- If a credential appears in a session, log, shell history, repository, Nook deployment, Telegram message, or history, treat it as exposed. First revoke or rotate it at the provider. Then replace the stored value through configuration or the auth command, restart the process that uses it if needed, and delete the exposed copy where retention rules allow. Redacting the copy does not replace rotation.
64
+ If a credential appears in a session, log, shell history, repository, Telegram message, or history, treat it as exposed. First revoke or rotate it at the provider. Then replace the stored value through configuration or the auth command, restart the process that uses it if needed, and delete the exposed copy where retention rules allow. Redacting the copy does not replace rotation.
66
65
 
67
66
  ## Understand environment sanitization
68
67
 
@@ -161,16 +160,6 @@ With global `history` configuration, entries are still written to local SQLite f
161
160
 
162
161
  Before turning on remote history, confirm who runs the service, its retention policy and region, who holds access keys, and which projects may be sent. One service key can search the whole shared collection. Rotate it if exposed. Removing the configuration does not delete data that was already copied. See [history](history.md) for storage and service behavior.
163
162
 
164
- ## Treat Nook output as published content
165
-
166
- Nook deploys static files to HTTPS URLs. Deployments are private by default, and `--public` makes a site's files reachable by anyone. Review the built output, not just the source, before deploying. Static files must never contain provider keys, source maps with secrets, private configuration, or data that should stay on the execution environment.
167
-
168
- Each site has a JSON KV store for the browser that survives redeploys. On a public site, anyone can read and write it. On a private site, it requires a Cloudflare Access identity, but it is still application data that every allowed user and the site's code can read. It is not a place for credentials.
169
-
170
- Cloudflare Access should protect only the `/__nook/*` control plane at the root. Public site paths must stay reachable without Access, while private sites sign in through `/__nook/auth`. The Nook Worker validates Access JWTs; service-token headers only get a request past Access. Follow the exact Access application, audience, cookie, and service token setup in [Nook](nook.md).
171
-
172
- The Nook session tool and the `tau nook` CLI can deploy, delete, copy, and change KV without asking for confirmation. The model's JavaScript never receives Access credentials, but Tau uses them for the Nook API calls the program makes.
173
-
174
163
  ## Edit configuration without widening authority accidentally
175
164
 
176
165
  A configuration change can redirect network traffic, expose tools, or send credentials somewhere new. Follow these steps:
@@ -196,7 +185,6 @@ Tau's internal files hold the state it needs to recover. They are not configurat
196
185
  - `~/.config/tau/history.sqlite` and its SQLite side files;
197
186
  - Telegram runner session and project-preference state;
198
187
  - managed Telegram workspaces or repository caches as a first-line repair;
199
- - code-mode or compaction temporary files as if they were durable state; or
200
- - Nook R2 or Durable Object records outside supported Nook operations.
188
+ - code-mode or compaction temporary files as if they were durable state.
201
189
 
202
- Use `tau auth` for Codex accounts, TUI or session protocol operations for sessions, configuration for behavior, and the documented commands for history and Nook. If recovery reports corruption, keep the original data, stop any other process writing to it, write down the exact error and Tau version, and investigate through normal recovery before trying any repair that deletes data.
190
+ Use `tau auth` for Codex accounts, TUI or session protocol operations for sessions, configuration for behavior, and the documented commands for history. If recovery reports corruption, keep the original data, stop any other process writing to it, write down the exact error and Tau version, and investigate through normal recovery before trying any repair that deletes data.
@@ -26,7 +26,6 @@ A native Tau subagent can receive these tools. [Claude Code subagents](#claude-c
26
26
  - `view_image`
27
27
  - `web`
28
28
  - `history`
29
- - `nook`, when Nook is configured
30
29
  - `mcp`, when the host has enabled MCP servers
31
30
  - `models`
32
31
 
@@ -37,7 +37,6 @@ write
37
37
  edit
38
38
  view_image
39
39
  web
40
- nook
41
40
  history
42
41
  mcp
43
42
  models
@@ -48,9 +47,9 @@ list_agents
48
47
  interrupt_agent
49
48
  ```
50
49
 
51
- A custom persona that omits `tools` gets `bash`, `write`, `edit`, `view_image`, `web`, `nook`, `history`, `mcp`, and `models`, plus the five subagent tools. Built-in personas get the same set.
50
+ A custom persona that omits `tools` gets `bash`, `write`, `edit`, `view_image`, `web`, `history`, `mcp`, and `models`, plus the five subagent tools. Built-in personas get the same set.
52
51
 
53
- `web`, `history`, `nook`, `mcp`, and `models` are not separate tools. Each enables a namespace inside the single `code` tool. `bash` enables both the Bash tools and `tau.bash` inside `code`. Tau adds `code` whenever at least one usable capability is selected; `code` itself cannot be listed. A namespace the persona does not select is missing from the `code` API and its documentation.
52
+ `web`, `history`, `mcp`, and `models` are not separate tools. Each enables a namespace inside the single `code` tool. `bash` enables both the Bash tools and `tau.bash` inside `code`. Tau adds `code` whenever at least one usable capability is selected; `code` itself cannot be listed. A namespace the persona does not select is missing from the `code` API and its documentation.
54
53
 
55
54
  An empty list turns off every selectable tool:
56
55
 
@@ -60,7 +59,7 @@ tools: []
60
59
 
61
60
  `tau_docs` stays available. The list also has no effect on client tools, which attached clients offer on their own.
62
61
 
63
- `nook` has one more condition: the host configuration must include a Nook target. Without one, Tau leaves the capability out even if the persona lists it. For other tools, missing credentials or service configuration can make calls fail, but do not remove the tool. Persona configuration is covered in [personas](personas.md).
62
+ Missing credentials can make calls fail, but do not remove the tool. Persona configuration is covered in [personas](personas.md).
64
63
 
65
64
  ## Tau documentation
66
65
 
@@ -143,7 +142,7 @@ Each guide covers setup, input, examples, outputs, and failures. Run `tau tool -
143
142
 
144
143
  ## Code-mode composition
145
144
 
146
- `code` runs a one-off JavaScript program that combines the enabled capabilities: `tau.web`, `tau.history`, `tau.nook`, `tau.mcp`, `tau.bash`, and `tau.models`. The Bash, write, edit, and image tools stay available as separate tools.
145
+ `code` runs a one-off JavaScript program that combines the enabled capabilities: `tau.web`, `tau.history`, `tau.mcp`, `tau.bash`, and `tau.models`. The Bash, write, edit, and image tools stay available as separate tools.
147
146
 
148
147
  ### Documentation and output
149
148
 
@@ -159,7 +158,7 @@ The guide covers runtime rules, capabilities, and examples. The agent reads each
159
158
  printText(await tau.docs("web"));
160
159
  ```
161
160
 
162
- The agent does not re-read documentation it has already seen. MCP tool descriptions and Nook's authoring guide are read in their own separate steps. Programs do not need to print intermediate results.
161
+ The agent does not re-read documentation it has already seen. MCP tool descriptions are read separately. Programs do not need to print intermediate results.
163
162
 
164
163
  `printText` accepts only strings; objects and arrays throw a `TypeError`. The agent selects relevant fields and explicitly formats concise plain text to save tokens. `JSON.stringify` is reserved for cases where the structure matters or machine-readable JSON is requested, with fields selected first instead of dumping whole responses.
165
164
 
@@ -184,7 +183,6 @@ Programs have no direct access to files, processes, environment variables, crede
184
183
 
185
184
  - `tau.web`: metadata discovery, Exa search, and fetching page content. Search uses Auto with Dynamic Highlights to select evidence across results. An optional `objective` (1–4,096 nonblank characters) describes the broader task and facts to extract. Results include a `notices` array with retrieval qualifications such as relaxed query restrictions; each notice retains its `code`, `path`, `message`, and optional `details`. The agent prints notices alongside selected search results. The agent prefers local data, dedicated CLIs, first-party APIs, and structured sources over scraping web pages. For GitHub it uses `gh` or a Git checkout where suitable. Metadata discovery works without an Exa key; search and content fetching need one.
186
185
  - `tau.history`: read-only search and paginated transcripts. The agent uses it only when explicitly told to look at past sessions. It treats past content as data and never follows instructions in it. See [history](history.md).
187
- - `tau.nook`: deploying sites, templates, and each site's JSON KV store. The agent uses it when the user asks to publish or manage Nook. Before writing an app, the agent reads `tau.nook.skill()` in a separate call that only prints documentation. See [Nook](nook.md).
188
186
  - `tau.mcp`: finding and calling tools and resources on configured MCP servers. When the persona allows MCP, enabled server names and optional configured descriptions are visible in the initial tool definition, before any tool call. Disabled servers and connection settings are omitted. These summaries guide discovery and do not grant permission to act. The agent reads each tool's description and schema before calling it. Connections are shared and opened on first use, and calls that change data are never retried. An `isError` result is returned as data, while protocol failures throw. MCP server configuration and trust rules apply. See [configuration reference](config-reference.md#mcpservers) and [security](security.md#trust-mcp-servers).
189
187
  - `tau.bash`: `run`, `start`, `list`, `read`, `wait`, and `stop`. `run` returns stdout, stderr, and exit and termination fields, capturing up to 24 MiB. Beyond that it keeps the end, so check `truncated` before parsing. Optional UTF-8 `stdin` is limited to 16 MiB and closed after writing. Without `stdin` the command has no stdin at all, while `""` gives it an empty one. `start` takes no stdin. Background jobs are the same jobs as the Bash tools', with the same output limits. Jobs survive the program ending and interruption, while foreground commands are cancelled. The shell rules above apply.
190
188
  - `tau.models`: lists a fixed set of OpenRouter models and runs standalone chats or typed decisions with them. These calls do not see the session's conversation or tools. Chat media can be paths on the agent's machine or inline padded base64 with a matching MIME type. Credentials stay on the host. Provider usage data is returned, but these charges are not included in the session's cost or usage logs. Requests can be cancelled and are never retried automatically. Limits on input, models, media, responses, and requests are the same as in [OpenRouter](openrouter.md). Check whether a response completed or was refused instead of assuming it is a full answer.
@@ -193,7 +191,7 @@ SDK and command client tools built on code mode use the same sandbox functions a
193
191
 
194
192
  ## Subagent tools
195
193
 
196
- A subagent gets each of `bash`, `write`, `edit`, `view_image`, `web`, `history`, `nook`, `mcp`, and `models` that the main persona also has, plus `tau_docs`. It never gets the subagent tools or client tools. Its Bash and file tools start in the subagent's working directory. [Subagents](subagents.md#tools) has the details.
194
+ A subagent gets each of `bash`, `write`, `edit`, `view_image`, `web`, `history`, `mcp`, and `models` that the main persona also has, plus `tau_docs`. It never gets the subagent tools or client tools. Its Bash and file tools start in the subagent's working directory. [Subagents](subagents.md#tools) has the details.
197
195
 
198
196
  ## Client-owned tools
199
197
 
@@ -13,11 +13,10 @@ tau --help
13
13
  tau attach --help
14
14
  tau auth --help
15
15
  tau history --help
16
- tau nook --help
17
16
  tau telegram --help
18
17
  ```
19
18
 
20
- Help describes that installed binary, and `tau_docs` describes the host's installed version. An attached TUI, a remote host, and deployed history or Nook services can each run a different version, so the host's documentation may not match an older client's flags or a separately deployed service.
19
+ Help describes that installed binary, and `tau_docs` describes the host's installed version. An attached TUI, a remote host, and deployed history services can each run a different version, so the host's documentation may not match an older client's flags or a separately deployed service.
21
20
 
22
21
  For a local startup, `tau --debug` loads configuration and content from the current directory, prints warnings and catalog information, and exits without opening the TUI:
23
22
 
@@ -114,7 +113,7 @@ Check the exact built-in theme ID and the client's `defaultTheme`. Use `/theme:<
114
113
 
115
114
  Work out which kind of tool is missing before changing configuration.
116
115
 
117
- For a host tool, check the active persona's `tools` list. A list replaces the defaults. Run `tau --debug --persona <id>` for a new local session, or reload the current session while idle. Missing credentials make a tool fail but usually do not remove it. Nook is the exception: it also needs `nook` configuration.
116
+ For a host tool, check the active persona's `tools` list. A list replaces the defaults. Run `tau --debug --persona <id>` for a new local session, or reload the current session while idle. Missing credentials make a tool fail but usually do not remove it.
118
117
 
119
118
  For subagents, check three things:
120
119
 
@@ -147,13 +146,13 @@ When the client detaches, its tools disappear and running calls are cancelled. R
147
146
 
148
147
  Find the process that makes the request:
149
148
 
150
- | Operation | Where the credential belongs |
151
- | --- | --- |
152
- | Model calls, host `web`, `history`, or `nook` | Host |
153
- | `/listen`, `/speak`, or TUI client tools | Client |
154
- | Telegram bot or transcription | Runner |
155
- | `tau nook`, `tau history`, or `tau tool` commands | The machine running the command |
156
- | Fly Sprite connection | Host startup configuration |
149
+ | Operation | Where the credential belongs |
150
+ | ---------------------------------------- | ------------------------------- |
151
+ | Model calls, host `web`, or `history` | Host |
152
+ | `/listen`, `/speak`, or TUI client tools | Client |
153
+ | Telegram bot or transcription | Runner |
154
+ | `tau history` or `tau tool` commands | The machine running the command |
155
+ | Fly Sprite connection | Host startup configuration |
157
156
 
158
157
  A variable set on the laptop does not reach a remote host. After changing environment variables or `apiKeys`, restart the process that uses them. `apiKeys` in a project file are rejected; check the process's environment and its global configuration.
159
158
 
@@ -223,11 +222,10 @@ A WebSocket client disconnecting does not interrupt a long-running host, but a s
223
222
 
224
223
  A session saved in a newer storage format needs that Tau version or later. Newer Tau versions upgrade supported older sessions automatically. For invalid JSON, snapshot, or ID errors, keep the file and the exact error, stop other hosts using the same store, and investigate through normal recovery. Do not edit or delete the file first.
225
224
 
226
- ## History, Nook, or Telegram
225
+ ## History or Telegram
227
226
 
228
227
  These features have their own troubleshooting sections:
229
228
 
230
229
  - [History](history.md#troubleshooting): missing API key, service errors, sessions missing from remote search, and local history failures.
231
- - [Nook](nook.md#common-errors): configuration, Access and authorization errors, wrong visibility, and deploy rejections.
232
230
  - [Telegram](telegram.md#troubleshooting): ignored messages, project selection, audio, voice replies, and late or missing replies.
233
231
  - [Telegram projects and workspaces](telegram-projects.md#troubleshooting): repository preparation, provisioning, and workspace recovery.
@@ -262,6 +262,7 @@ Transcription uses Gemini and needs `GEMINI_API_KEY` or `apiKeys.google`. The TU
262
262
  - Longer responses are split into balanced parts, each aiming for at most two minutes of speech.
263
263
  - The source and rewritten text are limited to 10,000 Unicode characters, and generation stops after 32 MiB of raw audio.
264
264
  - Voice lookups and synthesis requests have a two-minute deadline.
265
+ - The rewrite turns paths, commands, and formatting into spoken prose. It reads a link's label instead of its address, and refers to a bare address as a link. When the address points to an issue or pull request, the rewrite names it by number, such as "issue 620". The rewrite is model-generated, so an address may occasionally still be read aloud.
265
266
 
266
267
  See [`speech` configuration](config-reference.md#speech) for the default Maisie and Caleb voices and for choosing your own.
267
268