--- title: "The side panel" description: "Info, Files, Search, Source Control and GitHub — plus the built-in editor." --- ⌘ J opens a panel on the right of the window. It is hidden by default; whichever tab you leave it on is where it opens next time. The icons at the top switch tabs — hover one for its name — and clicking the lit one puts the panel away again. The tty7 side panel ## Info Everything tty7 knows about the focused pane, in one column: | Section | What it shows | |---|---| | **Session** | working directory, shell, SSH connection, git branch, `+N −M` changes, and the coding agent with its status (idle / working / waiting / done) | | **Processes** | the process tree inside the pane, with the foreground process marked | | **Ports** | every port those processes are listening on | Hovering a row shows what it can do at the right-hand end of it: **Copy** on the working directory, the SSH host and the branch, and **Reveal in Finder** / **Open Folder** alongside it on a working directory this machine can see. The `+N −M` counts open the [diff overlay](/git/diffs), the same click the sidebar's counts answer to. The ports section is the quickest answer to "what is this pane serving, and where" — the same data `tty7 procs` prints. A port row copies `localhost:PORT`, and on a local pane opens it in your browser. ## Files A file tree rooted at the pane's working directory, with git status decorations on every row and a search box at the top. The search box carries a clear button while there is something in it. - **Click a file** to open it in the built-in editor. - **Drag a file out** to Finder or Explorer to copy it there. - **Drag files in** from the desktop to copy them into the folder under the cursor. A folder row takes them itself, a file row stands in for the folder holding it, and the empty space below the tree means the top of it. Folders come in whole, the executable bit survives, and a name that is already taken is asked about rather than replaced. Both directions work over a [remote workspace](/remote/workspaces) too, reading on one machine and writing on the other, up to the size one control frame can carry — past that the panel tells you to use [SFTP](/remote/sftp). ## Search Find in files across the project the Files tab shows: the repository root of each pane in the tab, or its working directory outside a repository. Opening the tab — from its icon, **Right Panel: Search** in Search Everywhere, or the `ShowRightPanelSearch` action — puts the cursor in the search field. Results arrive as you type, grouped by file with a count per file; click a file's row to fold it away. Each hit is its line with the matches highlighted, and **clicking one opens the file in the built-in editor with the cursor on that line and column**. Enter in the field searches again, for when the files changed underneath you. The three toggles at the end of the field: | | | |---|---| | **Aa** | Match case — off by default, so `needle` finds `Needle` | | **ab** | Whole word — `foo` no longer finds `foobar` or `foo_bar` | | **.\*** | Regular expression, in Rust [`regex`](https://docs.rs/regex) syntax. A pattern that does not parse says why in red instead of searching | What is searched is what the tree shows: a folder's `.gitignore` applies whether or not it is in a repository, and dot-files and dot-directories are skipped. Binary files and files over 1 MB are stepped past. A search stops at 2,000 matching lines, 100 per file, 20,000 files or ten seconds, whichever comes first, and says so under the results — narrow the query to see the rest. In a [remote workspace](/remote/workspaces) the search runs on the remote machine and only the hits cross the network. A remote `tty7-server` older than this feature cannot search; the tab says so and asks you to update the server rather than showing an empty result. An SSH pane's files are browsed over [SFTP](/remote/sftp), which cannot search them — open the host as a remote workspace for that. ## Source Control The git panel for the focused pane's repository, in four groups — **Merge Changes**, **Staged Changes**, **Changes**, **Untracked**. Write a message, commit, and push without leaving the window. [Source control →](/git/source-control) ## GitHub Issues and pull requests for the repository the focused pane is in, read-only. The tab reads the repository's remotes and binds to the one on `github.com`; in a fork, where `origin` is yours and `upstream` is the project, it picks `upstream`, and the name at the top is a menu of every GitHub remote when there is more than one. GitHub Enterprise hosts are not supported. - **Issues | Pull Requests** and **Open | Closed** switch the list, newest activity first, 50 at a time with **Load more** underneath. - Each row carries a state glyph whose *shape* says open, closed, not planned, merged or draft; the number, author and last update; and the labels. **Click a label** to show only that label, and the × beside it to clear it. - **Click a row** for the detail: title, state, author, labels, the description and the conversation as Markdown. A pull request adds its branches, size and changed files — click a file to open its patch in the [diff overlay](/git/diffs). - The ↗ button opens the repository, or the issue, on github.com; ↻ refreshes. Lists are kept per repository, so switching tabs or panes does not fetch them again; anything older than two minutes is refreshed in the background while it stays on screen. ### Signing in There is nothing to sign in to in tty7. It reuses the GitHub CLI's login: the token comes from `GH_TOKEN`, then `GITHUB_TOKEN`, then `gh auth token`. `gh` is looked for on your `PATH` and in the usual Homebrew and `/usr/local/bin` locations, so it is found even when tty7 was opened from Finder. Without a token, public repositories still work, at GitHub's unauthenticated limit of 60 requests an hour. A private repository, or a spent limit, says so in the panel and suggests running `gh auth login`; press ↻ afterwards and the new login is picked up without a restart. The Info tab gains a **GitHub** row for a repository with a GitHub remote. It opens the branch you are on, on the remote it tracks — or the repository's page for a branch you have not pushed. Markdown from GitHub is written by strangers, so it is rendered with two changes: only images GitHub hosts itself — the screenshots pasted into an issue — are loaded, and any other image becomes a link you can open in the browser; and links that would open anything other than a web page or an e-mail are disabled. See [what leaves your machine](/reference/privacy#what-leaves-your-machine). ## The editor ⌘ ⇧ E toggles the code panel; clicking a file in the Files tab opens it there. It is a real editor — syntax highlighting, line and column readout, wrap toggle, and a Markdown preview — meant for the edit you would otherwise have opened `vim` for. | | | |---|---| | ⌘ S | Save | | Esc | Back to the terminal | Files are watched on disk: a change underneath you is picked up, and closing with unsaved edits asks before discarding them. Files over 4 MB and anything that looks binary are refused with a note rather than opened badly. ### Where it opens The editor docks beside the terminal, taking half the space between the sidebar and the right panel. The terminal keeps running, stays visible, and stays typeable — click it, read what your agent said, click back. Diffs open in the same column. Drag the divider for any width between a fifth and four fifths of that space — the range `document_ratio` keeps — or double-click it to cycle a third, a half and two thirds. **Document: Third / Half / Two-Thirds Width** in Search Everywhere do the same. On a narrow window the terminal's own floor stops the divider sooner. Right-click the document's header for **Fill window**, which is the old full-workspace overlay, unchanged. **Document: Fill Window** and **Document: Dock Beside Terminal** in Search Everywhere are the same switch. Fill or dock is **per tab**: read a long file over the whole window in one tab while an agent keeps half of another, and neither moves the other. A fresh tab starts from `document_layout` in `config.json`. The width is shared, and persists as `document_ratio`. A window too narrow to give both the terminal and the document a readable width fills for that file only — widen it and the column comes back, without your setting having changed.