@markusylisiurunen/tau 0.3.82 → 0.3.83
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 +6 -4
- 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/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/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 +69 -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 +45 -45
- package/dist/core/static/tau_docs/session-protocol.md +43 -43
- package/dist/core/static/tau_docs/sessions.md +99 -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 +64 -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 +124 -80
- 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-x29PkEoY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{angular-ts-CvVQslm2.js → angular-ts-CsWCqoCf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{apl-DNIxlYWe.js → apl-CEvdc7jl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{astro-DDOw4EUG.js → astro-Cgi6YxH2.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{blade-DlhB-SLW.js → blade-B0pr7Zx6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{c-C1f4vhDm.js → c-DDVLgtVy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{chapel-Ctt8xOX1.js → chapel-Bk9M7Jej.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cobol-BXw71PAA.js → cobol-DyEvnPuC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{coffee-CRh_5Nmr.js → coffee-Di2-m3Jq.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{cpp-IlI-zWOZ.js → cpp-CWpAaUgO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{crystal-CXeL28i7.js → crystal-CUker9Zt.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{css-BfST9hFI.js → css-D4XpBIiJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{edge--Q22k_ty.js → edge-CVxhhF7L.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elixir-CIfC_rQx.js → elixir-B_FS9APl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{elm-OkZ29XRO.js → elm-1KyefTkH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{erb-B8ZXgEqv.js → erb-CCgO9dRW.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{git-rebase-CxkO_WGd.js → git-rebase-D0VYo_oY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-js-BVadyIrr.js → glimmer-js-Ce07ngjZ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glimmer-ts-D5J3Qb7n.js → glimmer-ts-BmOM4djO.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{glsl-B6iy73-Y.js → glsl-D-jkLYJ8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{graphql-Dc3rUXf5.js → graphql-DZOwJE5e.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hack-q8Utf8Jp.js → hack-Cgvn19h8.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{haml-mjMIlj_2.js → haml-JTmDSYQl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{handlebars-CA-BL8Ks.js → handlebars-CChh7Dy5.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-BmPxhYCX.js → html-BKgzx_cb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{html-derivative-CvknIjuB.js → html-derivative-CdFl0BmX.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{http-DNxLDRIi.js → http-DZeL7KvH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{hurl-kbd3Eq2V.js → hurl-CqKevOlQ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/index-BXyr8GCM.js +341 -0
- package/dist/diff_tool/app/dist/assets/{java-BuZshgf1.js → java-Sq3MCkId.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{javascript-DfL2oeFU.js → javascript-CHZB4Nse.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jinja-Bu0KQihU.js → jinja-C4ucJVla.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jison-Bqn7Mf3Q.js → jison-D3mprebA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{json-BuX5LKaB.js → json-DgPfCYJ1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{jsx-DdVJ-ZBp.js → jsx-BG-Tx0cw.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{julia-CQeijOoQ.js → julia-B1GnFeUC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{just-vzAktFGR.js → just-_MZzo0MF.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{latex-Dm60cg0k.js → latex-DI0kqjQy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{liquid-vxKzm2P8.js → liquid-BtMAPeHl.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{lua-DIoqi4dd.js → lua-CFxaP0To.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{marko-BTHgFKby.js → marko-BIJocuFI.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{mdc-CEfz8gZ9.js → mdc-BAgrdjTH.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nginx-DNlFDEfJ.js → nginx-DE-3CsYn.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{nim-DnvT_0lZ.js → nim-DOxeXLhb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{org-BbD-ElVf.js → org-KTfP0tHA.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{perl-DTsbnAmK.js → perl-BH-NxpgK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{php-CwEsJe-W.js → php-vuiVEXZK.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{pug-BOttMVH-.js → pug-VlIlTMUy.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{qml-C8KkSItN.js → qml-k6wTtGG-.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{r-K4ksJj_R.js → r-Ccjcb2zh.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{razor-yuWRrrG6.js → razor-BNhYgSCv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{regexp-CV-jhnUz.js → regexp-C4LFejPu.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{rst-CLA3Attc.js → rst-DXLxI-UJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ruby-DiHR2-DX.js → ruby-BPuL4jDV.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sas-DxIjbYJ5.js → sas-B3Yz8snb.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{scss-CShwEaV4.js → scss-B2AJ5vpk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellscript-CeezOnrF.js → shellscript-zyDexxnC.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{shellsession-CjSS2r7j.js → shellsession-C8b8xluk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{soy-CI_v23nJ.js → soy-DKWe_XML.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{sql-D9GaB00A.js → sql-uEbz-Epf.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{stata-hK92TPE_.js → stata-DieRPmHY.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{surrealql-UO8LtPJG.js → surrealql-Dbk3Sp1P.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{svelte-kIlaw_oh.js → svelte-CjPbRmkM.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{templ-DFRz1JP6.js → templ-Do_f5vc4.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tex-CfxIXk_z.js → tex-UjLP4qUm.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{ts-tags-BtUHl0ff.js → ts-tags-5L2FutA6.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{tsx-Cd4SAe2C.js → tsx-B1pNtpUr.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{twig-CWk4q5Y3.js → twig-O41Vg_IM.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typescript-BqxGJiP0.js → typescript-Bj9uwnnJ.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{typst-D9nAun2p.js → typst-DsibO7oD.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-D6HYhg6_.js → vue-DPhaEurv.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-html-1VRlaENS.js → vue-html-DDV9NSy1.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{vue-vine-BaH0We9y.js → vue-vine-Dh4jOifx.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xml-C4RWnUuj.js → xml-DtIulkQk.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{xsl-D1iD38ga.js → xsl-DoWtb58Z.js} +1 -1
- package/dist/diff_tool/app/dist/assets/{yaml-yAb4W0G-.js → yaml-CZC-l1Dg.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/main.js +6 -7
- package/dist/main.js.map +1 -1
- package/dist/tui/session_chat_controller.js +14 -3
- package/dist/tui/session_chat_controller.js.map +1 -1
- package/dist/tui/ui/footer.js +2 -4
- package/dist/tui/ui/footer.js.map +1 -1
- package/package.json +9 -9
- package/dist/diff_tool/app/dist/assets/index-D8ZI_2RC.js +0 -340
- package/dist/nook/README.md +0 -123
|
@@ -1,83 +1,83 @@
|
|
|
1
1
|
# History
|
|
2
2
|
|
|
3
|
-
Tau keeps transcript history so
|
|
3
|
+
Tau keeps a searchable transcript history so you can find earlier work without reopening every session. History is separate from saved sessions. The host uses the saved session to continue and recover a conversation, while history is a flat record for searching and reading.
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
This matters for recovery, compaction, and privacy. History cannot rebuild a lost session, and keeping history does not make a missing session resumable. See [sessions](sessions.md) for saving and recovery.
|
|
6
6
|
|
|
7
7
|
## What local history records
|
|
8
8
|
|
|
9
|
-
Every Tau host opens a
|
|
9
|
+
Every Tau host opens a SQLite database on its own machine:
|
|
10
10
|
|
|
11
11
|
```text
|
|
12
12
|
~/.config/tau/history.sqlite
|
|
13
13
|
```
|
|
14
14
|
|
|
15
|
-
The
|
|
15
|
+
The file is in the **host user's home**. An attached TUI or a remote execution environment does not get its own history. Local `tau`, `tau serve`, and the default SDK host all use the host machine's database.
|
|
16
16
|
|
|
17
|
-
For each session, history stores
|
|
17
|
+
For each session, history stores the creation attributes and the active transcript, in order:
|
|
18
18
|
|
|
19
|
-
-
|
|
20
|
-
-
|
|
21
|
-
- assistant text
|
|
22
|
-
-
|
|
19
|
+
- user messages, as text or as text and image blocks, with Tau's internal metadata removed
|
|
20
|
+
- intermediate system instructions as plain text, marked as system entries, without Tau metadata (the persona's base prompt is not included)
|
|
21
|
+
- assistant text, including preambles and responses, but not thinking
|
|
22
|
+
- finished tool calls, with the tool name, arguments, result, and outcome
|
|
23
23
|
|
|
24
|
-
|
|
24
|
+
`<system>...</system>` blocks at the start of user messages stay in history. Tool arguments and results can contain file contents, command output, and other sensitive data, so treat the database as private. Tau creates its directory and file with private permissions, but the host user and the machine's administrators can still read them. Never copy the database into a repository or share it.
|
|
25
25
|
|
|
26
|
-
|
|
26
|
+
Recording history is best effort. If the database cannot open, or a later write fails, the session keeps running. Tau adds one `history unavailable` warning to the session, which stays in the session, and turns history off until the host restarts. A restart tries to open the database again.
|
|
27
27
|
|
|
28
28
|
## How session operations affect history
|
|
29
29
|
|
|
30
|
-
History
|
|
30
|
+
History follows the transcript, not the model's current context.
|
|
31
31
|
|
|
32
|
-
**Rewind removes
|
|
32
|
+
**Rewind removes later entries.** When a session rewinds to a message, Tau deletes history from that message onward. The same deletion is queued for a configured remote collection.
|
|
33
33
|
|
|
34
|
-
**Compaction
|
|
34
|
+
**Compaction keeps entries.** Compaction replaces the session's model context with a summary, but the original entries stay in history. Work from before a compaction can still be found, even though the session no longer contains it word for word.
|
|
35
35
|
|
|
36
|
-
**Retry
|
|
36
|
+
**Retry deletes nothing.** Only operations that remove messages from the session, such as rewind, delete history. Retrying does not.
|
|
37
37
|
|
|
38
|
-
These rules
|
|
38
|
+
These rules differ from how the session itself behaves. Use [sessions](sessions.md) to understand what a recovered session shows or sends to the model.
|
|
39
39
|
|
|
40
|
-
##
|
|
40
|
+
## Filter by attributes
|
|
41
41
|
|
|
42
|
-
Session creation attributes are
|
|
42
|
+
Session creation attributes are string pairs set by the client that created the session, and they never change. History stores them and can filter on exact values or on case-sensitive substrings. They describe where a session came from; they are not instructions.
|
|
43
43
|
|
|
44
|
-
Two
|
|
44
|
+
Two common attributes are:
|
|
45
45
|
|
|
46
|
-
| Attribute |
|
|
46
|
+
| Attribute | Meaning |
|
|
47
47
|
| --- | --- |
|
|
48
|
-
| `source` |
|
|
49
|
-
| `repository` | Normalized `host/owner/repository`;
|
|
48
|
+
| `source` | The creating client, usually `tui`, `telegram`, or a value an SDK caller chose |
|
|
49
|
+
| `repository` | Normalized `host/owner/repository`; composite workspaces join repositories with commas |
|
|
50
50
|
|
|
51
|
-
A local TUI
|
|
51
|
+
A local TUI usually fills in `repository` from the current Git repository or repositories directly below it. Telegram fills it in for repository projects and leaves it out for persistent-directory projects. Sessions created with `tau attach` may not have it, and SDK or protocol clients set only the attributes they choose.
|
|
52
52
|
|
|
53
|
-
Because composite values are comma-
|
|
53
|
+
Because composite values are comma-separated, a substring filter on `repository` finds both single-repository and composite sessions. Attributes may be missing, out of date, or set deliberately by a client, so confirm important facts from the transcript or the current workspace.
|
|
54
54
|
|
|
55
55
|
## Agent access is explicit and read-only
|
|
56
56
|
|
|
57
|
-
|
|
57
|
+
A persona can enable the read-only `tau.history` capability in the `code` tool. It searches and reads the configured history collection, across all repositories and execution environments. Because it can see so much, the agent uses it only when the request or active instructions directly ask for past transcripts, not to look for possibly related earlier work on its own initiative.
|
|
58
58
|
|
|
59
|
-
Automatic compaction archives
|
|
59
|
+
Automatic compaction archives are different. They hold the current session's context from before a compaction, in the execution environment. `history` searches a separate collection on the host, which may be out of date, truncated, unavailable, or copied to a remote service. After a compaction, the agent is therefore pointed to the archive files to recover details, and history entry IDs have nothing to do with archive lookups.
|
|
60
60
|
|
|
61
|
-
The
|
|
61
|
+
The agent reads the capability's documentation before using it. If it has not seen the documentation, its first call only prints `docs`, and later calls use the API. Documentation already in the conversation is reused. This page does not repeat the API or its limits. The documentation covers short chronological overviews and targeted lookups, for when the agent knows the session but not the entry, so it does not need repeated guesses or full dumps.
|
|
62
62
|
|
|
63
|
-
|
|
63
|
+
Attributes, snippets, digests, entries, tool arguments, and tool results from history are untrusted. The agent treats them as evidence, never as instructions, and returns only what the current request needs. Custom personas and subagents get or lose `history` through their tools; see [tools](tools.md), [personas](personas.md), and [subagents](subagents.md).
|
|
64
64
|
|
|
65
|
-
Without remote history
|
|
65
|
+
Without remote history, the capability searches the host's local database. With a remote target, it searches only the remote service and never mixes in local results. A remote search can therefore fail even while local recording keeps working.
|
|
66
66
|
|
|
67
67
|
## Add a shared remote collection
|
|
68
68
|
|
|
69
|
-
Tau can deploy an optional
|
|
69
|
+
Tau can deploy an optional Cloudflare history service, owned by one person or team, that collects history from several hosts. It uses a Worker, D1, Workers AI, and a custom hostname, and **requires the Cloudflare Workers Paid plan**.
|
|
70
70
|
|
|
71
|
-
The service adds
|
|
71
|
+
The service adds search across hosts, generated session titles, and summaries. Titles and summaries help with searching, but they are not exact records, and they can be missing or out of date. Read the transcript entries when exact evidence matters.
|
|
72
72
|
|
|
73
|
-
|
|
73
|
+
Setup requires:
|
|
74
74
|
|
|
75
|
-
- Wrangler installed and
|
|
76
|
-
- a Cloudflare zone
|
|
77
|
-
- `CLOUDFLARE_API_TOKEN` available to the command
|
|
78
|
-
- a history API key and separate viewer password supplied securely, or
|
|
75
|
+
- Wrangler installed and on `PATH`
|
|
76
|
+
- a Cloudflare zone that contains the chosen hostname
|
|
77
|
+
- `CLOUDFLARE_API_TOKEN` available to the command, so Wrangler authenticates without prompts
|
|
78
|
+
- a history API key and a separate viewer password, supplied securely, or setup can generate both
|
|
79
79
|
|
|
80
|
-
Run setup on
|
|
80
|
+
Run setup on a machine with Cloudflare access:
|
|
81
81
|
|
|
82
82
|
```sh
|
|
83
83
|
tau history setup \
|
|
@@ -85,33 +85,40 @@ tau history setup \
|
|
|
85
85
|
--zone-name example.net
|
|
86
86
|
```
|
|
87
87
|
|
|
88
|
-
`TAU_HISTORY_DOMAIN` and `TAU_HISTORY_ZONE_NAME` can provide the two values instead. Setup creates or reuses the `tau-history` D1 database, applies
|
|
88
|
+
`TAU_HISTORY_DOMAIN` and `TAU_HISTORY_ZONE_NAME` can provide the two values instead. Setup creates or reuses the `tau-history` D1 database, applies its migrations, deploys the `tau-history` Worker route, and stores the API key and viewer password as separate Worker secrets.
|
|
89
89
|
|
|
90
|
-
For the API key
|
|
90
|
+
For the API key, `--api-key` wins over `TAU_HISTORY_API_KEY`, and setup generates a key if neither is given. For the viewer password, `--viewer-password` wins over `TAU_HISTORY_VIEWER_PASSWORD`, and setup generates one if neither is given. The two must differ. Prefer a secret manager or a protected environment over command-line values, which can end up in shell history. Never paste either credential into a session.
|
|
91
91
|
|
|
92
92
|
## Browse remote conversations
|
|
93
93
|
|
|
94
|
-
Open the
|
|
94
|
+
Open the service's address, for example `https://history.example.net/`, to browse the collection read-only. Sign in with HTTP Basic authentication, username `tau`, and the viewer password from setup.
|
|
95
95
|
|
|
96
|
-
|
|
96
|
+
- Setup prints passwords it generates, but never prints ones you supplied.
|
|
97
|
+
- Plain HTTP requests from outside are redirected to HTTPS before sign-in. HTTP on loopback works for local development.
|
|
98
|
+
- The password never appears in a URL, and pages are not cached by the browser.
|
|
99
|
+
- The password gives read access to transcripts, attributes, tool arguments, and tool results from every host that uses the service. Keep it private.
|
|
97
100
|
|
|
98
|
-
|
|
101
|
+
The index lists recently updated sessions with titles, summaries, times, and attributes, plus a search form.
|
|
99
102
|
|
|
100
|
-
|
|
103
|
+
- Repository and source filters match case-sensitive substrings. They combine with text search and stay active across pages.
|
|
104
|
+
- **Older sessions** loads the next page; pages never load by themselves.
|
|
105
|
+
- A summary can be pending or out of date while the transcript is already available.
|
|
101
106
|
|
|
102
|
-
|
|
107
|
+
A session page starts empty, then loads the transcript in batches and adds them in order, with no scrolling or page controls. Tool entries start collapsed. Text and metadata are shown as plain text, never as HTML or Markdown. Valid PNG, JPEG, GIF, and WebP blocks are shown as images, and other structured content as plain text.
|
|
103
108
|
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
109
|
+
**Copy conversation** at the top works once the whole transcript has loaded. If loading fails, a retry button appears and copying stays off. The selector next to it chooses what to copy:
|
|
110
|
+
|
|
111
|
+
- **Messages only** (the default) leaves out tool entries.
|
|
112
|
+
- **Include tool calls** adds tool names, arguments, and outcomes, without results.
|
|
113
|
+
- **Include everything** adds results too.
|
|
107
114
|
|
|
108
|
-
|
|
115
|
+
These options do not depend on which tool cards are expanded. Each entry's own **Copy** button copies the complete entry. Leaving out tools or results reduces noise but does not remove sensitive content from messages or arguments. The API still returns results page by page.
|
|
109
116
|
|
|
110
|
-
|
|
117
|
+
Remote search and read results include a stable `webUrl` for each session, which `tau.history` can return when asked for a link. The URL alone grants no access; the browser still needs the viewer password. Local-only history has no web URL.
|
|
111
118
|
|
|
112
119
|
## Configure hosts to replicate
|
|
113
120
|
|
|
114
|
-
Remote history
|
|
121
|
+
Remote history can be set only in the host's global Tau config, normally `~/.config/tau/config.json`:
|
|
115
122
|
|
|
116
123
|
```json
|
|
117
124
|
{
|
|
@@ -122,69 +129,97 @@ Remote history is accepted only in the host's eligible global Tau config, normal
|
|
|
122
129
|
}
|
|
123
130
|
```
|
|
124
131
|
|
|
125
|
-
`endpoint` must be an HTTP or HTTPS URL without credentials,
|
|
132
|
+
`endpoint` must be an HTTP or HTTPS URL without credentials, query, or fragment. Tau removes trailing slashes. The host uses the first API key it finds:
|
|
126
133
|
|
|
127
134
|
1. `TAU_HISTORY_API_KEY`
|
|
128
135
|
2. the host environment variable named by `history.apiKeyEnv`
|
|
129
136
|
3. inline `history.apiKey`
|
|
130
137
|
|
|
131
|
-
If
|
|
138
|
+
If `history` is set but no key is found, the host fails to start, instead of quietly running without remote history. The key stays on the host and is never visible to history code-mode programs. See [credentials](credentials.md) for where to put it.
|
|
132
139
|
|
|
133
|
-
Restart the host after changing this block or its environment. `/reload`
|
|
140
|
+
Restart the host after changing this block or its environment variables. `/reload` does not reload it.
|
|
134
141
|
|
|
135
142
|
## Replication and outages
|
|
136
143
|
|
|
137
|
-
|
|
144
|
+
Replication starts locally:
|
|
145
|
+
|
|
146
|
+
1. Tau writes each history change to local SQLite.
|
|
147
|
+
2. In the same transaction, it adds the change to a local outbox on disk.
|
|
148
|
+
3. The host sends pending changes to the endpoint in the background.
|
|
149
|
+
4. Changes the service accepts are removed from the outbox.
|
|
150
|
+
|
|
151
|
+
A service outage does not block sessions or local recording. Pending changes stay on disk and are sent again later, including after a host restart or the next history activity. The service applies each change only once, even if it arrives twice. Changes for one session are sent in order, and each session is sent independently of the others.
|
|
152
|
+
|
|
153
|
+
If the service permanently rejects a change, for example because the session's attributes conflict with what it already has, Tau stops sending changes for that session only. The pending changes and the error stay in local SQLite, later changes for that session wait, and other sessions keep replicating. Temporary network, authentication, rate-limit, and service errors leave changes pending for a later retry. Both kinds of failure produce a `history_replication_failed` host diagnostic, without the API key:
|
|
154
|
+
|
|
155
|
+
- Headless Tau commands print it to stderr.
|
|
156
|
+
- The TUI distinguishes blocked replication from a retryable delay in the footer. A transcript notice keeps the affected session, operation ID (when known), and error.
|
|
157
|
+
- An in-process SDK host delivers it only through `onDiagnostic`, when configured.
|
|
158
|
+
|
|
159
|
+
Local entries keep everything recorded. For the remote copy, an entry larger than 1 MiB keeps its ID and metadata, but oversized content, arguments, or results are truncated in the middle with a marker. The host's local entry can therefore contain details the shared copy leaves out.
|
|
160
|
+
|
|
161
|
+
With a remote target configured, history searches go only to the service. Tau never falls back to local results when the service is unreachable, because that would change which collection you are searching. Do not assume sessions recorded before you added the configuration appear remotely.
|
|
138
162
|
|
|
139
|
-
|
|
140
|
-
2. The same transaction appends an ordered operation to a durable local outbox.
|
|
141
|
-
3. The host sends pending operations to the configured endpoint asynchronously.
|
|
142
|
-
4. Successful acknowledgements remove those operations from the outbox.
|
|
163
|
+
## Recover blocked replication
|
|
143
164
|
|
|
144
|
-
A
|
|
165
|
+
A permanent rejection blocks that session until you explicitly retry it. Restarting the host does not clear the block, also called a quarantine.
|
|
145
166
|
|
|
146
|
-
|
|
167
|
+
Run this on the affected host with its remote history configuration:
|
|
147
168
|
|
|
148
|
-
|
|
169
|
+
```sh
|
|
170
|
+
tau history status
|
|
171
|
+
```
|
|
172
|
+
|
|
173
|
+
The command prints persisted quarantines for the configured endpoint as JSON. It does not require an API key. When a change fails, its diagnostic identifies the failed operation, even if earlier changes in the same request succeeded. Request-level and transport failures may have no operation ID.
|
|
149
174
|
|
|
150
|
-
|
|
175
|
+
Fix the underlying service or data problem before retrying. If the service needs an update, deploy it with `tau history setup` using the setup requirements above and the existing credentials. Then, on the affected host, run:
|
|
176
|
+
|
|
177
|
+
```sh
|
|
178
|
+
tau history retry --session <session-id>
|
|
179
|
+
```
|
|
180
|
+
|
|
181
|
+
Retry requires the host's history API key. It clears only the named session's quarantine and sends pending changes with their original operation IDs. Local history and queued changes are preserved. The command can also send pending changes for other unblocked sessions at the same endpoint; other quarantines stay blocked.
|
|
182
|
+
|
|
183
|
+
If the service permanently rejects the session again, Tau restores its quarantine. A temporary failure leaves changes pending for a later retry. The command exits unsuccessfully if the selected session remains blocked or a temporary failure prevents replication from completing.
|
|
151
184
|
|
|
152
185
|
## Verify operation
|
|
153
186
|
|
|
154
|
-
|
|
187
|
+
Check that each step works, without looking at credentials or dumping transcripts:
|
|
155
188
|
|
|
156
|
-
1. Confirm setup
|
|
157
|
-
2. Add the global config and key environment
|
|
158
|
-
3. Create a small
|
|
159
|
-
4.
|
|
160
|
-
5.
|
|
189
|
+
1. Confirm setup finished the D1 migration and Worker deployment without errors.
|
|
190
|
+
2. Add the global config and the key's environment variable on one host, then restart it.
|
|
191
|
+
3. Create a small throwaway session with distinctive, non-sensitive text.
|
|
192
|
+
4. Ask the agent explicitly to search history for that session. It reads the capability's `docs` first.
|
|
193
|
+
5. With several hosts, repeat from another host, and allow time for replication and summaries.
|
|
161
194
|
|
|
162
|
-
A transcript can become
|
|
195
|
+
A transcript can become searchable before its summary appears, so a missing summary does not mean replication failed. Open the service in a browser and sign in to confirm the session and its transcript are there.
|
|
163
196
|
|
|
164
|
-
Cloudflare
|
|
197
|
+
Cloudflare problems show up in the normal Worker logs, Cron Events, and D1 diagnostics. The service has no separate admin dashboard or status endpoint.
|
|
165
198
|
|
|
166
199
|
## Troubleshooting
|
|
167
200
|
|
|
168
|
-
**`history` is configured but no API key is available.** Set `TAU_HISTORY_API_KEY`,
|
|
201
|
+
**`history` is configured but no API key is available.** Set `TAU_HISTORY_API_KEY`, set the variable named by `apiKeyEnv`, or use an inline key only if the config file is well protected. Restart the host.
|
|
202
|
+
|
|
203
|
+
**The agent has no history capability.** The active persona must select `history`. Fix the persona and run `/reload` while idle.
|
|
169
204
|
|
|
170
|
-
**The history
|
|
205
|
+
**The history capability returns a service error while the session works.** Remote searches and replication can fail without affecting the session. Check that the endpoint is reachable and read the Worker logs, without printing the key. Local recording continues unless the session also shows a `history unavailable` warning.
|
|
171
206
|
|
|
172
|
-
**The browser
|
|
207
|
+
**The browser keeps asking for credentials.** Use username `tau` and the viewer password from the latest setup. The API key is for hosts and does not work in the browser.
|
|
173
208
|
|
|
174
|
-
**A session does not appear in remote search.** Confirm
|
|
209
|
+
**A session does not appear in remote search.** Confirm the host was restarted with the remote config, the session was used while the config was active, and enough history activity has happened to send the outbox. Check host logs for `history_replication_failed`. A permanent rejection affects only the named session, while other failures are retried. Summaries are not immediate.
|
|
175
210
|
|
|
176
|
-
**Local history became unavailable.**
|
|
211
|
+
**Local history became unavailable.** On the host, check that you are running as the expected user and home, and check file access, free space, and ownership of `~/.config/tau`, the Node version, and whether another process is using the database. A restart is needed to reopen history after a local failure. Do not open, edit, replace, or delete the SQLite files as a first repair, and do not inspect outbox rows or keys.
|
|
177
212
|
|
|
178
|
-
**Search finds material removed from model context.** This is expected after compaction.
|
|
213
|
+
**Search finds material removed from the model's context.** This is expected after compaction. After a rewind, the removed entries should disappear; if the remote copy still has them, wait for the deletion to replicate.
|
|
179
214
|
|
|
180
215
|
## Destroy the remote service
|
|
181
216
|
|
|
182
|
-
`tau history destroy --yes` permanently deletes the
|
|
217
|
+
`tau history destroy --yes` permanently deletes the `tau-history` Worker and D1 database, and with them the shared transcripts and summaries. It does not delete any host's local `history.sqlite`, and it is not a substitute for a retention or export plan.
|
|
183
218
|
|
|
184
|
-
Run
|
|
219
|
+
Run it only once you are sure the service and its data are no longer needed:
|
|
185
220
|
|
|
186
221
|
```sh
|
|
187
222
|
tau history destroy --yes
|
|
188
223
|
```
|
|
189
224
|
|
|
190
|
-
The command
|
|
225
|
+
The command needs `CLOUDFLARE_API_TOKEN`. It reports each resource separately and treats Tau history resources that are already gone as deleted. If one deletion fails, read the partial result before retrying. Afterward, remove the `history` config from your hosts and restart them; otherwise their remote searches and replication keep failing.
|
|
@@ -16,18 +16,20 @@ Requires an OpenAI or Google API key for the selected model. See [feature-specif
|
|
|
16
16
|
|
|
17
17
|
## Models and capabilities
|
|
18
18
|
|
|
19
|
-
`--model` is required;
|
|
19
|
+
`--model` is required; there is no default. Start with `gpt-image-2.5-flare` at `--quality medium` for everyday generation and editing, balancing quality and cost.
|
|
20
20
|
|
|
21
|
-
|
|
21
|
+
For demanding generation and editing where image quality is the priority, choose `gemini-nano-banana-2.1` or `gpt-image-2.5-sunburst`. Nano Banana supports very wide aspect ratios and resolution tiers up to `4K`. Sunburst supports exact dimensions, transparent backgrounds, and PNG/JPEG/WebP output. See [approximate cost](#approximate-cost) before choosing settings.
|
|
22
|
+
|
|
23
|
+
Choose size, resolution, and aspect ratio for the intended use; no single size fits everything. The sizes in the examples are for those particular cases. Options you leave out use the provider's defaults, except `--format`, which defaults to `png`. Unsupported options fail before anything is generated.
|
|
22
24
|
|
|
23
25
|
| Model | Resolution | Aspect ratios | Thinking | Other controls |
|
|
24
26
|
| --- | --- | --- | --- | --- |
|
|
25
|
-
| `gemini-
|
|
26
|
-
| `gemini-3.1-flash-image` | `512`, `1K`, `2K`, `4K` | Standard and wide | `minimal`, `high` | PNG |
|
|
27
|
-
| `gemini-3.1-flash-lite-image` | `1K` | Standard and wide | `minimal`, `high` | PNG |
|
|
27
|
+
| `gemini-nano-banana-2.1` | `1K`, `2K`, `4K` | Standard and wide | `minimal`, `medium`, `high` | PNG |
|
|
28
28
|
| `gpt-image-2.5-flare` | Exact `--size` | Through dimensions | Not exposed | Quality, background, encoding, compression |
|
|
29
29
|
| `gpt-image-2.5-sunburst` | Exact `--size` | Through dimensions | Not exposed | Quality, background, encoding, compression |
|
|
30
30
|
|
|
31
|
+
Google's defaults are `1K` resolution and `medium` thinking. Use `--thinking minimal` for faster generation and lower thinking-token usage.
|
|
32
|
+
|
|
31
33
|
Standard `--aspect-ratio` values are `1:1`, `2:3`, `3:2`, `3:4`, `4:3`, `4:5`, `5:4`, `9:16`, `16:9`, `21:9`. Wide values additionally include `1:4`, `4:1`, `1:8`, `8:1`. Resolution tiers describe approximate output size.
|
|
32
34
|
|
|
33
35
|
OpenAI controls:
|
|
@@ -42,9 +44,9 @@ Gemini does not support transparent-background generation ([Google documentation
|
|
|
42
44
|
|
|
43
45
|
## Input and examples
|
|
44
46
|
|
|
45
|
-
|
|
47
|
+
Give exactly one of `--prompt` and `--prompt-file` (UTF-8). Repeat `--reference` for each local PNG, JPEG, or WebP reference image. References are sent in order and unchanged. With references, OpenAI requests use the edit endpoint.
|
|
46
48
|
|
|
47
|
-
Up to 16 references are accepted for OpenAI and 14 for Gemini
|
|
49
|
+
Up to 16 references are accepted for OpenAI and 14 for Gemini. Each reference is limited to 50 MB. Gemini's complete serialized request is limited to 19 MB, including the prompt, base64-encoded references, and JSON escaping.
|
|
48
50
|
|
|
49
51
|
Create an asset:
|
|
50
52
|
|
|
@@ -69,7 +71,7 @@ Generate at a higher resolution using a reference:
|
|
|
69
71
|
|
|
70
72
|
```bash
|
|
71
73
|
tau tool image-generate \
|
|
72
|
-
--model gemini-
|
|
74
|
+
--model gemini-nano-banana-2.1 --reference ./sauna.png \
|
|
73
75
|
--prompt 'Recreate this image at higher resolution. Preserve composition and colors; refine fine detail.' \
|
|
74
76
|
--aspect-ratio 16:9 --resolution 4K --output ./sauna-4k.png
|
|
75
77
|
```
|
|
@@ -84,7 +86,7 @@ for i in 1 2 3 4; do
|
|
|
84
86
|
done
|
|
85
87
|
```
|
|
86
88
|
|
|
87
|
-
Each
|
|
89
|
+
Each run is independent; an edit sees only the prompt and references you give it.
|
|
88
90
|
|
|
89
91
|
## Outputs and recovery
|
|
90
92
|
|
|
@@ -94,13 +96,13 @@ The output's parent directory must exist. Neither the output nor `<output>.parts
|
|
|
94
96
|
- `image.<format>`: the published image. Gemini responses are converted to PNG when needed; OpenAI bytes are saved as returned.
|
|
95
97
|
- `manifest.json`: model, output path, usage, and `source` with the original filename and provider-declared MIME type (`null` when absent).
|
|
96
98
|
|
|
97
|
-
|
|
99
|
+
The original bytes and usage are kept even if conversion fails. Conversion may drop embedded metadata, so use the original when provenance matters.
|
|
98
100
|
|
|
99
|
-
Failures exit nonzero and
|
|
101
|
+
Failures exit nonzero and name the invalid option or the step that failed. If the output or `.parts` path already exists, choose a new `--output` path, and keep the existing files in case you need them. Once generation has started, errors give the path of the kept directory, which may be empty or incomplete. If only the final copy to `--output` fails, the error points to the finished image, so copy it to a new path instead of generating again. Requests are never retried automatically, because a failed request may already have been charged, and a new request may be charged again.
|
|
100
102
|
|
|
101
103
|
## Approximate cost
|
|
102
104
|
|
|
103
|
-
|
|
105
|
+
For OpenAI models, start at `--quality medium`, use `low` for inexpensive exploration, and increase quality when the result needs it. Explicit `--size` and `--quality` make budgeting more predictable than `auto`. For Nano Banana, account for resolution and thinking usage as well as input costs.
|
|
104
106
|
|
|
105
107
|
### OpenAI: cost per image
|
|
106
108
|
|
|
@@ -121,12 +123,12 @@ For example, 100 square 1024-pixel drafts at `low` have an estimated output cost
|
|
|
121
123
|
|
|
122
124
|
Approximate USD image-output costs from [Google pricing](https://ai.google.dev/gemini-api/docs/pricing), excluding input and text/thinking usage:
|
|
123
125
|
|
|
124
|
-
| Model
|
|
125
|
-
|
|
|
126
|
-
| `gemini-
|
|
127
|
-
|
|
128
|
-
|
|
126
|
+
| Model | 1K | 2K | 4K |
|
|
127
|
+
| ------------------------ | ------- | ------- | ------ |
|
|
128
|
+
| `gemini-nano-banana-2.1` | $0.0336 | $0.0504 | $0.113 |
|
|
129
|
+
|
|
130
|
+
Input costs $1.50 per million tokens. Text and thinking output cost $7.50 per million tokens, in addition to image output. The manifest records provider-reported usage.
|
|
129
131
|
|
|
130
132
|
Use OpenAI when transparent backgrounds or JPEG/WebP output are required. Compare the quality needed for the task, not just matching tier names across providers. Check [OpenAI pricing](https://developers.openai.com/api/docs/guides/image-generation#gpt-image-25-costs) and Google pricing for current rates before large batches.
|
|
131
133
|
|
|
132
|
-
See [command-line tools](tools.md) for
|
|
134
|
+
See [command-line tools](tools.md) for the other tools and where commands run.
|
|
@@ -1,48 +1,47 @@
|
|
|
1
1
|
# Tau documentation
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
The intrinsic `tau_docs` tool reads one exact Markdown path at a time. It does not search files, list current settings, or inspect client-local state. Start here, choose the page that matches the task, and pass its flat path exactly.
|
|
3
|
+
These pages describe how to install, configure, operate, and integrate the version of Tau they ship with. Tau's agent reads the same pages through its built-in documentation tool, one page at a time.
|
|
6
4
|
|
|
7
5
|
## Start and orient
|
|
8
6
|
|
|
9
|
-
- [Getting started](getting-started.md)
|
|
10
|
-
- [Ownership and scope](ownership-and-scope.md)
|
|
11
|
-
- [TUI](tui.md)
|
|
12
|
-
- [Troubleshooting](troubleshooting.md)
|
|
7
|
+
- [Getting started](getting-started.md): install Tau, set up a provider, and run a first local session.
|
|
8
|
+
- [Ownership and scope](ownership-and-scope.md): which machine runs what in local and remote sessions. Read it before changing paths or remote-session configuration.
|
|
9
|
+
- [TUI](tui.md): interactive commands, keybindings, themes, speech, and other terminal behavior.
|
|
10
|
+
- [Troubleshooting](troubleshooting.md): checks for common startup, configuration, provider, tool, and remote-session problems.
|
|
13
11
|
|
|
14
12
|
## Configure Tau
|
|
15
13
|
|
|
16
|
-
- [Configuration](configuration.md)
|
|
17
|
-
- [Configuration reference](config-reference.md)
|
|
18
|
-
- [Credentials](credentials.md)
|
|
19
|
-
- [Models](models.md)
|
|
20
|
-
- [Personas](personas.md)
|
|
21
|
-
- [Subagents](subagents.md)
|
|
22
|
-
- [Skills](skills.md)
|
|
23
|
-
- [Prompts and project context](prompts-and-project-context.md)
|
|
24
|
-
- [Client tools](client-tools.md)
|
|
25
|
-
- [Security](security.md)
|
|
14
|
+
- [Configuration](configuration.md): where configuration lives, which layer wins, how to edit safely, and when changes apply.
|
|
15
|
+
- [Configuration reference](config-reference.md): every top-level `config.json` field and when a change takes effect.
|
|
16
|
+
- [Credentials](credentials.md): API keys, Codex OAuth accounts, key precedence, and where credentials belong.
|
|
17
|
+
- [Models](models.md): the bundled model catalog and how it is refreshed.
|
|
18
|
+
- [Personas](personas.md): model, instructions, reasoning, tools, and custom persona files.
|
|
19
|
+
- [Subagents](subagents.md): when agents can start subagents, which models they may use, and how to supervise them.
|
|
20
|
+
- [Skills](skills.md): skill discovery, frontmatter, trigger sensitivity, and tool eligibility.
|
|
21
|
+
- [Prompts and project context](prompts-and-project-context.md): prompt templates, `AGENTS.md`, and extra context files.
|
|
22
|
+
- [Client tools](client-tools.md): command-backed tools that run on the machine of the attached client.
|
|
23
|
+
- [Security](security.md): trust boundaries, secrets, process execution, and remote access.
|
|
26
24
|
|
|
27
25
|
## Build integrations
|
|
28
26
|
|
|
29
|
-
- [Session protocol](session-protocol.md)
|
|
30
|
-
- [Session protocol method reference](session-protocol-methods.md)
|
|
31
|
-
- [Node SDK](node-sdk.md)
|
|
32
|
-
- [SDK browser diff review](sdk-diff-review.md)
|
|
27
|
+
- [Session protocol](session-protocol.md): transports, message envelopes, session state, deltas, errors, and rules for clients.
|
|
28
|
+
- [Session protocol method reference](session-protocol-methods.md): every request method and its result.
|
|
29
|
+
- [Node SDK](node-sdk.md): choosing a client, the session API, streamed state, client tools, cancellation, and exported types.
|
|
30
|
+
- [SDK browser diff review](sdk-diff-review.md): hosting the built-in review UI from an SDK application.
|
|
33
31
|
|
|
34
32
|
## Work with sessions and services
|
|
35
33
|
|
|
36
|
-
- [Tools](tools.md)
|
|
37
|
-
- [Sessions](sessions.md)
|
|
38
|
-
- [Remote sessions](remote-sessions.md)
|
|
39
|
-
- [History](history.md)
|
|
40
|
-
- [Nook](nook.md)
|
|
41
|
-
- [Telegram](telegram.md)
|
|
34
|
+
- [Tools](tools.md): built-in tools, when they are available, how they run and stop, and code-mode tools.
|
|
35
|
+
- [Sessions](sessions.md): creating sessions, turns, queueing, compaction, rewind, recovery, and storage.
|
|
36
|
+
- [Remote sessions](remote-sessions.md): `serve`, `attach`, remote paths, and authentication.
|
|
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
|
+
- [Telegram](telegram.md): running the Telegram runner, bot access, chat commands, attachments, and recovery.
|
|
40
|
+
- [Telegram projects and workspaces](telegram-projects.md): repository, persistent-directory, and composite projects, workspace lifecycle, and provision hooks.
|
|
42
41
|
|
|
43
42
|
## Run command-line tools
|
|
44
43
|
|
|
45
|
-
- [PDF unpacking](pdf-unpacking.md)
|
|
46
|
-
- [Image generation](image-generation.md)
|
|
47
|
-
- [Speech generation](speech-generation.md)
|
|
48
|
-
- [OpenRouter](openrouter.md)
|
|
44
|
+
- [PDF unpacking](pdf-unpacking.md): OCR PDFs with Mistral into Markdown and page images.
|
|
45
|
+
- [Image generation](image-generation.md): generate and edit images with Google and OpenAI.
|
|
46
|
+
- [Speech generation](speech-generation.md): narration and dialogue with ElevenLabs voices, assembled into long WAV files.
|
|
47
|
+
- [OpenRouter](openrouter.md): typed decisions and text, image, audio, and video understanding with fixed models.
|