Files
tty7/docs/getting-started/first-launch.mdx
T
l0ng-ai 6fcf659e04 feat(search): tabbed Search Everywhere with a Sessions tab to resume agent sessions (#969)
* feat(search): replace the command palette with tabbed Search Everywhere

The palette was one flat list that every new kind of row had to be squeezed
into: tabs and SSH hosts rode along as "Switch to Tab: …" and "SSH: …"
commands, and the only way to narrow to one kind was a magic seed word.

Search Everywhere splits it into sources behind one trait — All, Actions,
Terminals, Hosts — each with its own empty-query layout and ranking. The All
tab shows each source's top rows, ordered by best match, with a row that
opens the full tab. Tab / Shift-Tab walk the tabs and keep the query.

- Terminals lists every open tab of every workspace (reusing the switcher's
  tab rows) and jumps to it wherever it lives, plus the shells and agents.
- Hosts replaces the separate "Add Connection" input: a typed address or
  full `ssh …` line offers to connect.
- Fixes Return doing nothing after a search that found nothing, or when the
  search opens pre-filtered: gpui-component re-picks the row from a stale
  frame; the delegate now re-arms the first row.
- Fixes `ssh -p 2222 me@box` being offered as a quick-connect address with
  user `ssh -p 2222 me`.

The keymap action stays `TogglePalette` so custom bindings keep working.

* feat(search): a Sessions tab to resume past agent sessions

Search Everywhere gains a Sessions tab listing the Claude Code and Codex
sessions on this computer, read from ~/.claude/projects and
~/.codex/sessions ($CODEX_HOME). Sessions that ran in the focused tab's
directory lead; the All tab offers the last three of them before anything
is typed. Return opens a new tab in the session's directory and runs the
agent's resume command with its configured launch flags.

- Only each transcript's head and tail are read, off the window thread,
  and cached by path, size and mtime: ~170ms cold for 50 sessions,
  under 1ms warm. The search opens on the cached list and fills in.
- Titles: /rename name, then the agent's own title (ai-title, Codex's
  session_index.jsonl), then the first thing typed, skipping harness
  injections. Codex rollouts it ran for itself (subagent/internal) and
  sessions never asked anything are left out.
- A session whose directory is gone is refused with a notice rather than
  resumed where the agent cannot find it.
2026-09-27 09:38:31 +08:00

129 lines
5.2 KiB
Plaintext

---
title: "First launch"
description: "The handful of settings worth changing before you start working."
---
Open tty7 and you get a window with one tab and one shell, and a tab sidebar
down the left. Everything below is optional — but these are the settings people
end up changing anyway, so they are worth five minutes now.
Open Settings with <kbd>⌘ ,</kbd> (<kbd>Ctrl ,</kbd> on Windows and Linux), or
from Search Everywhere (<kbd>⌘ P</kbd> → *Settings*).
<Frame caption="Settings → Appearance">
<img src="/images/settings-appearance.webp" alt="tty7 Settings" />
</Frame>
## 1. Pick a theme
**Settings → Appearance → Theme.** Nine themes ship built in — Light, One Light,
Catppuccin Latte, Rosé Pine Dawn, Dark, Dracula, Harbor, One Dark Pro, and
Rosé Pine. The default is **Light**.
Turn on **Sync with system** to pick a light theme and a dark theme separately;
tty7 then follows the OS appearance live.
Transparency lives on the same page, under **Transparency** — opacity applies to
every theme, and *Follow theme* hands the decision back to the theme's own
setting. On Windows there is also a **Background material** picker (Mica,
Acrylic, and friends).
[More about themes →](/customization/themes)
## 2. Choose your shell
**Settings → Terminal → Shell.** Leave **Program** empty to use the platform
default. Otherwise it takes an executable name on PATH or an absolute path
(`zsh`, `fish`, `pwsh`, `nu`, `/opt/homebrew/bin/bash`), plus **Arguments** —
`-l` for a login shell, say. Arguments split the way a command line splits, so
quote anything that contains a space: `-c "echo hi"` is two arguments, not
three.
**Start in** decides what a *fresh* shell opens in: tty7's launch directory
(the default), your home folder, or a fixed path. New tabs and splits keep
inheriting the active pane's directory either way.
## 3. macOS only: decide what Option does
**Settings → Keyboard & Mouse → Keyboard → Option (⌥) acts as Meta.**
Off (the default), <kbd>⌥ B</kbd> types `∫`, which is what macOS has always
done. On, it sends the escape chord shells expect, so <kbd>⌥ B</kbd> moves back
a word and <kbd>⌥ ⌫</kbd> deletes one. Turn it on if you live in readline;
leave it off if you type accented characters.
## 4. If you use coding agents, install the hooks
**Settings → Integrations.** tty7 detects 25 coding CLIs by process name on its own —
you get brand avatars and tab labels for free. The *status dots*, the "needs
your permission" notifications, and `tty7 wait` all need one more thing: a small
hook the agent calls to report what it is doing.
Click **Install** next to Claude Code, Codex, TraeCode, Copilot CLI, OpenCode,
Pi, Grok Build, or Oh My Pi. It writes into that agent's own config directory and can be
removed from the same row.
[More about agents →](/agents/status)
## 5. Know what Quit does
Plain **Quit** closes the window and leaves the background server running.
Your shells, builds, and agent turns keep going, and reopening tty7 reattaches
to them.
To actually stop everything, use **Quit and Stop Server…** from the tray icon's
menu. It says so plainly before it does it: anything still running in your
shells is terminated, while your tabs and layout are kept and reopen with fresh
shells.
<Note>
This is why there is no tmux in the picture. The persistence is not a feature
of your shell setup — it belongs to the server underneath.
[Core concepts →](/getting-started/concepts)
</Note>
## 6. Tune the notifications
**Settings → General → Notifications.** By default tty7 posts a desktop
notification when a foreground command that ran longer than 10 seconds
finishes — but only while the window is unfocused. Set **Notify on command
finish** to *Never* or *Always*, and move the threshold if 10 seconds is the
wrong number for your work.
Agent notifications ("needs your permission…", "finished after 42s") follow the
same policy.
## 7. Coming from tmux?
**Settings → Keyboard & Mouse → Keyboard shortcuts → Preset → tmux** remaps pane and tab actions onto a
prefix, <kbd>⌃ B</kbd> by default. <kbd>⌃ B</kbd> <kbd>C</kbd> opens a tab,
<kbd>⌃ B</kbd> <kbd>%</kbd> splits, <kbd>⌃ B</kbd> then an arrow moves focus.
A bare prefix reaches the shell after about a second, and prefix plus an unbound
key passes straight through — so a tmux binding you did not remap still lands in
whatever is running.
[More about keybindings →](/customization/keybindings)
## Where things live
| | macOS / Linux | Windows |
|---|---|---|
| Settings file | `~/.config/tty7/config.json` | `%APPDATA%\tty7\config.json` |
| Custom themes | `~/.config/tty7/themes/` | `%APPDATA%\tty7\themes\` |
Everything in the Settings window writes to `config.json`, and you can edit it
by hand instead — see the [configuration reference](/reference/configuration).
Set `TTY7_CONFIG_DIR` to move the whole directory somewhere else.
## Next
<CardGroup cols={2}>
<Card title="Core concepts" icon="cube" href="/getting-started/concepts">
Workspaces, tabs, panes, and the server that owns them.
</Card>
<Card title="The prompt" icon="terminal" href="/terminal/prompt">
Suggestions, completion, and history search — the part you touch most.
</Card>
</CardGroup>