Talk to tau¶
Two channels run in the terminal today. tau chat is a line-based REPL: one prompt, streamed replies, tool lines, approvals on stdin. tau tui is a full Textual interface: markdown replies, tool cards, a live events pane, a session picker and a modal approval dialog. They share the same slash commands, the same session store and the same tier gate, so you can start in one and /resume in the other.
tau chat |
tau tui |
|
|---|---|---|
| Best for | scripts, slow links, a quick question | daily use, the phone, long sessions |
| Replies | streamed plain text | streamed markdown |
| Tool calls | dim lines | cards with tier, approval, duration and result |
| Approvals | Approve? [y/N] on stdin |
modal dialog with Approve / Reject |
| Agent events | in the log file only | live pane, replayed on /resume |
| Cancel a turn | Ctrl-C | Esc |
| Leave | /quit, Ctrl-D |
/quit, Ctrl+Q |
| Needs a TTY | no | yes |
Both read the same config and stop with exit code 2 before anything opens when credentials are missing, the config is broken or a --resume ID is unknown.
tau chat¶
tau chat # new session on the brain role
tau chat --resume # continue the most recent earlier session
tau chat --resume ID # continue that session
tau chat --session ID # start with this session id
tau chat --role fast # pin a role for the whole run
tau --lang tr chat # Turkish chrome
tau ready. Profile: home, session: 20260929-173826-f949. Commands: /help, /tools, /sessions, /resume, /new, /session, /compact, /clear, /status, /model, /lang, /quit (Ctrl-D also quits).
you> Merhaba tau
tau> Merhaba. Nasıl yardımcı olabilirim?
you> /session
Session: 20260929-173826-f949
Title: Merhaba tau
Messages: 2
Store: file (~/.local/share/tau/sessions)
The REPL does one thing at a time: a command never overlaps a turn. Ctrl-C during a turn cancels it at the next safe point and prints Interrupted.; Ctrl-C at the prompt leaves.
Approvals on the terminal¶
A tier-2 call blocks the turn and asks on stdin:
⚠️ Approval needed (tier 2)
Tool: demo_physical_action
Arguments: {"action": "turn on the desk lamp"}
Effect: Demo: simulates a physical action; no real device moves.
Approve? [y/N]
y,yes,eorevetapproves, in either UI language.- Anything else rejects:
n, Enter, Ctrl-D, a typo. - There is no timeout on the terminal; the prompt waits for you.
- A rejection does not end the turn. The model reads
The user did not approve this actionas the tool result and answers.
Slash commands¶
A line that starts with / is a command. The channel handles it; the model never sees it. The twelve canonical names are English; Turkish aliases (/devam, /çık, /özet, …) keep working but are never shown.
| Command | What it does |
|---|---|
/help |
list the commands with one-line help |
/tools |
registered tools with their tier and description |
/sessions |
the 10 most recent earlier sessions, numbered |
/resume, /resume n, /resume id |
resume the most recent earlier session, the n-th of the last listing, or an id |
/new |
start a fresh session; the current one stays on record |
/session |
current session id, title, message count and store |
/compact [focus] |
summarize this session with its own model and continue in a new session seeded with the summary; the old one is kept |
/clear |
clear the screen; the session and the agent go on |
/status |
profile, session, model, context, tools, UI language, versions, hub |
/model [role] |
list the roles of tau.toml, or switch this session to one; /resume remembers it |
/lang en, /lang tr |
switch the UI language for this run |
/quit |
leave; /exit is an alias |
you> /status
Profile: home
Session: 20260929-173826-f949 · Merhaba tau · 2 messages stored · role brain
Model: brain → anthropic (fallback; bedrock has no credentials) · claude-sonnet-5
Context: sliding, window 60 · 2 messages in memory
Tools: 2 registered · 1 need approval (tier 2)
UI language: en
Versions: tau-core 0.2.0 · tau-tui 0.2.0
Hub: hub is not running (nothing answers on http://127.0.0.1:7877/health)
/status names the model per role and whether the fallback is in use, never a key. The slash command reference has the aliases and the exact wording of every notice.
tau tui¶
tau tui # new session
tau tui --resume # continue the most recent earlier session
tau tui --resume ID
tau tui --profile travel
tau --home /path/to/root --lang tr tui
The interface is one row of chrome at the top and at most four at the bottom, so 80x24 over mosh on a phone stays usable. The header shows the profile, the session id, the role, the tool count and the UI language; the composer is a rounded box that grows from one to five lines; the hint bar names the keys that matter right now.
τ tau home · 20260929-120000-abcd brain · en
› Salon lambası açık mı? Açıksa kapat.
● get_light_state(room="salon") tier 0 · 38ms
⎿ {"on": true, "brightness": 80}
● set_light(room="salon", on=false) tier 2 · approved · 412ms
⎿ Light turned off
τ Salon lambası kapatıldı.
• Önceki durum: açık, %80 parlaklık
✓ Worked for 4s · 2 tool calls · ctrl+o expand
╭──────────────────────────────────────────────────────────────────────────────╮
│ ❯ Type a message… │
╰──────────────────────────────────────────────────────────────────────────────╯
? shortcuts · / commands · ctrl+j newline ctrl+q quit
Glyphs, one cell each and no emoji: › you · τ tau · ● finished tool call · ○ running or waiting for approval · ⎿ result line · ✻ busy · ✓ ◆ ✗ turn footer (finished / needs you or limit / error) · ▸ notice · ❯ prompt.
Layout by screen size¶
The TUI picks a layout from the terminal size. Width bands: phone below 60 columns, narrow 60–99, wide 100–139, ultra 140 and up. Height bands: short below 20 rows, mid, tall 30 and up.
| Terminal | What you get |
|---|---|
| 50x24 (phone, Termius over mosh) | The header drops the session id (/session shows it), tool badges move to the result line, the composer has no border, hints read ^j, the welcome card shows the 16-column mark, replies stream as plain text and settle into markdown when the segment ends, the approval dialog is full width with stacked buttons. |
| 80x24 (narrow) | The layout above. ctrl+e or F4 swaps the transcript for the events log in the same body; Esc returns. |
| 80x30 (narrow, tall) | An 8-row events strip under the transcript. |
| 100x30 (wide) | The events pane docks on the right (34 columns); ctrl+e hides it. |
| 160x45 (ultra) | A read-only session sidebar on the left (28 columns); clicking a row resumes. Events pane 40 columns. |
| under 20 rows (short) | No hint row, the welcome mark is hidden, the composer grows to two rows. |
Keys¶
| Key | Effect |
|---|---|
| Enter | send, or accept the highlighted menu row |
| ctrl+j | newline (shift+enter too where the terminal delivers it) |
| Esc | close the menu · cancel the running turn · leave the events view · scroll back to the bottom |
| ctrl+e / F4 | events: toggle the column (≥ 100 cols) or the view (< 100 cols) |
| ctrl+r / F2 | session picker (Enter resumes, n new, Esc closes) |
| ctrl+n | new session |
| ctrl+t / F3 | /tools |
| ctrl+o / F6 | expand or collapse the cards of the last turn: arguments as JSON and the full result |
| PageUp / PageDown, F7 / F8 | scroll the transcript; PageUp at the top of a folded history loads 20 older turns |
| F9 | back to the bottom |
| ↑ / ↓ | recall sent prompts; navigate the menu while it is open |
? or F1 |
help (only in an empty composer) |
| ctrl+q | quit (ctrl+c copies a selection; without one it only says how to quit) |
Typing / into an empty composer opens a fuzzy menu of the twelve commands: ↑↓ pick, Tab completes, Enter runs, Esc closes. A command typed in full runs as typed even if the menu has not caught up with a burst of keys, so /session never runs /sessions.
While tau answers, the composer keeps your text and a toast says so. /new, /resume, /compact, /clear and /model <role> wait for the current turn; /status and /model without an argument answer any time.
Approvals in the TUI¶
A tier-2 call opens a translucent dialog over the chat: tool, effect, the arguments as pretty JSON, Approve and Reject.
yoreapproves;n,hor Esc rejects. Focus starts on Reject, so Enter rejects. Tab moves between the two buttons.y/eand Approve only work half a second after the dialog opens; the hint reads(arming…)meanwhile. Keys you were typing into the chat cannot approve by accident.- Anything other than an explicit approval rejects: a dialog closed another way, a cancelled wait, an app that is no longer running.
- Behind the dialog the tool card reads
○ set_light(…)and⎿ ◆ waiting for your approval; the composer border and the headerτturn Flare.
Terminal knobs¶
| Setting | Effect |
|---|---|
TAU_TUI_ASCII=1 |
ASCII vocabulary and box borders for terminals without the block characters |
TAU_TUI_PLAIN_STREAM=1 |
stream every reply as plain text and parse the markdown once per segment |
TEXTUAL_ANIMATIONS=none |
no header motion |
TEXTUAL_COLOR_SYSTEM / --ansi |
the 16-colour tau-ansi theme |
Live markdown streaming needs at least 60 columns. While the TUI runs, details go to <TAU_DATA_DIR>/logs/tau.log; the chat shows a short notice instead of a traceback.
The UI language¶
--lang sets the chrome for one run; it is exported as TAU_LANG, so the TUI, the terminal and their approval prompts agree. /lang en or /lang tr switches it inside a session. The persona keeps answering in whatever language you write.
Where things end up¶
- Sessions:
<TAU_DATA_DIR>/sessions/<id>/, one directory each, kept forever. Sessions and compaction. - Log:
<TAU_DATA_DIR>/logs/tau.log,INFOand up with tracebacks; tier-1 and tier-2 tool calls with their arguments and approval. - Nothing else. No telemetry, no cloud copy unless you set up backups.