Files
tty7/docs/remote/sftp.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

60 lines
2.3 KiB
Plaintext

---
title: "SFTP"
description: "A file browser for the machine on the other end of the connection."
---
While a pane is in an SSH session, *SSH: Remote Files* (Search Everywhere) slides
a file panel in over it. It is a real SFTP client on the same connection — no
second login, no second password.
<Frame caption="The SFTP panel over an SSH pane, a download in progress">
<img src="/images/sftp-panel.webp" alt="The tty7 SFTP panel" />
</Frame>
## Browsing
The panel opens wherever the pane's shell currently is. If tty7 cannot tell
(the remote shell does not report its directory), it opens on the last folder
you browsed in that pane, or on the remote home directory the first time.
Switching between panes with the panel open brings each pane back to the folder
you left it on. **Go to Shell Directory** in the overflow menu jumps back to the
shell's directory at any time.
Right-click a row for **Edit** (**Open** on a directory), **Download**,
**Follow Symlink**, **Rename**, **chmod…**, and delete. The overflow menu adds
**New Folder**, **New File**, **Upload…**, and **Refresh**.
## Editing
Click a text file and it opens in the [built-in
editor](/window/side-panel), the same gesture as the local file tree; saving
writes straight back over the same connection. Files the editor cannot hold —
binary, or over its 4 MB limit — say so instead; right-click → **Download**
for those.
## Transferring
| Direction | How |
|---|---|
| Download | Right-click → **Download** |
| Upload | **Upload…**, or drag files into the panel |
Uploads are written under a temporary name and renamed into place at the end, so
a half-finished file never looks like a finished one. A name that is already
taken asks before replacing.
**Transfer History** in the overflow menu shows every transfer with its
progress, and lets you cancel one in flight. The panel header summarises what is
happening — *"2 transferring · 64%"*.
## Permissions
**chmod…** takes an octal mode (`755`, `600`). The current mode is shown in the
row's editor before you change it.
<Tip>
For files in a [remote workspace](/remote/workspaces) you can often skip SFTP
entirely — the Files panel reads and writes across the link directly, and the
built-in editor saves back to the remote machine.
</Tip>