mirror of
https://github.com/l0ng-ai/tty7.git
synced 2026-10-03 16:01:59 +00:00
* 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.
57 lines
1.8 KiB
Plaintext
57 lines
1.8 KiB
Plaintext
---
|
|
title: "Worktrees"
|
|
description: "An isolated checkout on a fresh branch, in one dialog and one tab."
|
|
---
|
|
|
|
Running two agents on the same repository at once means they fight over the
|
|
working tree. A git worktree is the fix, and tty7 makes it a single dialog.
|
|
|
|
## Creating one
|
|
|
|
**New Worktree Tab…** — in Search Everywhere, the tab's right-click menu, and
|
|
the application menu — asks three things:
|
|
|
|
| Field | Default |
|
|
|---|---|
|
|
| **Worktree Name** | A fresh name that does not collide with an existing branch or directory |
|
|
| **New Branch** | The same name, editable |
|
|
| **Start From** | The branch you are currently on |
|
|
|
|
Each field opens on a suggestion you can accept or type straight over.
|
|
|
|
<Frame caption="The New Worktree Tab dialog, every field pre-filled">
|
|
<img src="/images/new-worktree.webp" alt="Creating a worktree" />
|
|
</Frame>
|
|
|
|
Confirm and tty7 creates the worktree, opens a tab in it, and starts a shell
|
|
there. The [sidebar](/window/sidebar) files it under the same repository group as
|
|
its parent, on its own branch.
|
|
|
|
## Where they go
|
|
|
|
Worktrees land inside the repository, under:
|
|
|
|
```
|
|
<repo>/.tty7/worktrees/<name>
|
|
```
|
|
|
|
`<repo>/.tty7/.gitignore` is created with `*` in it the first time, so the
|
|
directory never shows up as an untracked mess in your own repository.
|
|
|
|
## Removing one
|
|
|
|
Closing a worktree tab offers to remove the worktree with it:
|
|
|
|
- **Clean tree** — *Remove Worktree* or *Keep*.
|
|
- **Dirty tree** — the dialog says so, and removing requires the explicit
|
|
*Discard Changes & Remove*.
|
|
|
|
Nothing is removed silently, and *Keep* leaves the worktree on disk for `git
|
|
worktree list` to find later.
|
|
|
|
<Tip>
|
|
Pair this with [agent sessions](/agents/sessions): a worktree per agent means
|
|
two Claude Codes can work on the same repository without stepping on each
|
|
other's files.
|
|
</Tip>
|