Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
99 changes: 93 additions & 6 deletions Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

56 changes: 46 additions & 10 deletions PRD.md
Original file line number Diff line number Diff line change
Expand Up @@ -86,11 +86,14 @@ The app has two primary regions plus a topbar and a status bar: a **left sidebar
- **Stash** — split button: stash all, stash staged, pop, apply.
- **Branch** — current branch + dropdown to switch / create.
- **Open in…** — editor, terminal, file manager, web (GitHub/GitLab URL).
- **Work** — toggle that focuses the main pane on Local Changes (staging mode).
- **Work** is the startup destination for lightweight working-tree editing, file inspection, and
repository-scoped embedded terminals. Local Changes remains the separate
staging/commit workspace.
- **Repo tabs** — multi-repo, like browser tabs. Reorderable, persisted across launches.

### Sidebar (left) — navigation source

- **Work** — mixed file/terminal tabs for the active repository.
- **Local Changes** — working tree + index status. Shows a badge with file count when there are uncommitted changes.
- **Pull Requests** — hosted pull requests for the current repository, starting
with GitHub and Azure DevOps; GitLab and Bitbucket follow through the same
Expand All @@ -110,6 +113,34 @@ The app has two primary regions plus a topbar and a status bar: a **left sidebar

The main pane fills the right side and shows different content based on the sidebar selection.

#### When **"Work"** is selected — documents and terminals

Work has one peer tab strip for files, directories, and embedded
shells. A single file click/focus owns one replaceable italic preview; Enter,
double-click, Files **Open**, History, Blame, and palette selection pin it.
File tabs keep Content, rendered Preview, History, Compare, or Blame per tab,
and only the active file document mounts or fetches. File tabs survive view and
repository switches during the process but are not restored after relaunch.
The peer strip preserves tab width, scrolls horizontally by wheel, exposes an
overflow jump list, and uses the Files tree's icons for file tabs.

Terminal renderers and PTYs survive view, workspace, and repository switches.
Their descriptors restore after relaunch without starting a process; explicitly
selecting a restored tab starts a fresh shell at that worktree root. Natural
exit keeps the transcript and offers Relaunch. Closing the tab removes its
descriptor; final repository close confirms before stopping live terminals,
and app exit always drains every terminal process tree. Settings → Terminal
chooses a global embedded shell plus a repository-family override, terminal
font, and font size. New-terminal affordances also expose installed shells and
Windows WSL distributions for a one-off tab choice. This is
separate from the external **Open in terminal** integration. PTY dimensions
must match the fitted renderer before startup and after resize so full-screen
alternate-screen tools can occupy the complete Work pane. The embedded terminal
advertises modern xterm/true-color capability and agent-specific compatibility
hints where they are inert for other commands; Claude Code opens its full
dashboard and alternate-screen renderer rather than the post-onboarding mini
logo.

#### When **"Local Changes"** is selected — staging workspace

A three-section vertical layout with a commit form pinned to the bottom:
Expand All @@ -128,12 +159,13 @@ This is the main workspace for committing — all staging, diff inspection, disc
- Commit metadata (message, author, date, parents, sign status).
- Changed files list + `@pierre/diffs` rendering.

#### When **a file is selected** (from the sidebar Files tree) — four tabs
#### When **a file is selected** (from the sidebar Files tree) — Work document modes

1. **Content** — file content at the current revision (working tree by default, or at the selected commit). Existing UTF-8 working-tree files are syntax-highlighted and editable; historical revisions, binaries, and oversized files are read-only.
2. **History** — commits that touched this file, with a per-commit diff preview. Click a commit to jump to it in the graph.
3. **Compare** — pick any two revisions (commits, branches, tags, or "working tree") and render the diff for this file using `@pierre/diffs`.
4. **Blame** — per-line author + commit attribution. Click a line to jump to the commit that introduced it.
1. **Content** — editable existing UTF-8 working-tree text, or read-only content at a selected revision.
2. **Preview** — safe rendered Markdown/SVG and image preview where supported.
3. **History** — commits that touched this file, with a per-commit diff preview. Click a commit to jump to it in the graph.
4. **Compare** — pick two revisions and render the file diff with `@pierre/diffs`.
5. **Blame** — per-line author + commit attribution. Click a line to jump to the commit that introduced it.

If the file has uncommitted changes, the Content tab shows the working-tree version with a banner offering to switch to the unstaged diff. Tab state persists per-file across the session.

Expand Down Expand Up @@ -216,19 +248,23 @@ Priority levels: **P0** = required for first public release, **P1** = required b
| Git status badges (M/A/D/R/U) | P0 | Built into `@pierre/trees`. |
| Folder descendant-changed indicator | P0 | Built-in. |
| Search / filter by name | P0 | Built-in. |
| Four-tab file view (see below) | P0 | The main pane when a file is selected from the sidebar tree. |
| Work file documents (see below) | P0 | Preview/pinned tabs when a file is selected from Files. |
| Drag-and-drop to move files | P1 | Renames tracked as Git renames. |
| Custom right-click menu | P0 | Open in editor, copy path, history, blame, ignore, reveal in finder, etc. |
| Compact / default / relaxed density | P1 | Pierre supports this; expose as a setting. |

**Four-tab file view.** Clicking a file in the sidebar tree opens it in the main pane with four tabs:
**Work file documents.** Files open in Work with Content, Preview (when
supported), History, Compare, and Blame modes. Existing complete UTF-8 working-
tree files support lightweight syntax-highlighted editing; historical revisions,
binaries, oversized files, and non-UTF-8 text stay read-only.

- **Content** — file content at the current revision (working tree by default, or at the selected commit). Existing UTF-8 working-tree files are syntax-highlighted and editable; historical revisions, binaries, and oversized files are read-only.
- **Content** — editable syntax-highlighted working-tree text or read-only content at a selected revision.
- **Preview** — rendered Markdown/SVG or an image/directory presentation where supported.
- **History** — commits that touched this file, with per-commit diff previews. Click a commit to jump to it in the graph.
- **Compare** — pick any two revisions (commits, branches, tags, or "working tree") and render the diff for this file using `@pierre/diffs`.
- **Blame** — per-line author + commit attribution. Click a line to jump to the commit that introduced it.

Tab state persists per-file across the session so jumping back to a file restores the last-used view.
The inner mode persists per pinned Work tab during the session. File tabs do not restore after relaunch.

### 6.6 More features

Expand Down
34 changes: 26 additions & 8 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@ shortcuts").
| `Mod+K` | Command palette |
| `Mod+O` | Open repository |
| `Mod+,` | Settings |
| `Mod+1…5` | Local Changes · All Commits · Reflog · Review · Worktrees |
| `Mod+1…7` | Work · Local Changes · All Commits · Reflog · Review · Worktrees · Workspace Review |
| `Mod+Tab` / `Mod+Shift+Tab` | Next / previous repository |
| `Mod+E` | Switch repository (quick-switcher) |
| `Mod+P` | Push |
Expand All @@ -42,7 +42,9 @@ shortcuts").
Surface-local keys (not rebindable, documented in Settings → Keyboard):
`Mod+Enter` commit · `Mod+F` search in file or diff · `/` search commits · `j`/`k`
walk the file list · `n`/`p` step change blocks · `Shift+J`/`Shift+K` scroll the
diff · palette `↑↓`/`↵`/`⇥`/`Esc`.
diff · Work tabs `Ctrl/⌘+PageUp`/`PageDown` or `←→`/`Home`/`End`/`Delete`,
with `F6` to leave a terminal ·
palette `↑↓`/`↵`/`⇥`/`Esc`.

Strand is a native, cross-platform Git client (Tauri 2 + Rust + React) with
a dedicated surface for reviewing an agent's changes: whole-file-context
Expand All @@ -54,7 +56,22 @@ keyboard alone, and the mouse stays first-class.

## Features

- **Review view (⌘4)** — read an agent's changes as whole files with the
- **Work view (⌘1)** — Strand's default startup workspace combines editable
working-tree file documents and embedded shells in one tab strip. Files get VS Code-style
preview/pin behavior and retain Content, rendered Preview, History, Compare,
Blame, image, and directory modes. Multiple terminals run at the repository
root and keep output, scrollback, and selection across view, repository, and
workspace switches, and full-screen terminal apps receive the fitted PTY
grid. Claude Code starts with its complete dashboard and alternate-screen
renderer in a configurable terminal font and size. Work tabs keep their width in a wheel-scrollable strip with an overflow
selector and tree-matched file icons. Only descriptors restore after
relaunch; selecting one starts a fresh process. The New Terminal split button
can launch a one-off native or WSL shell, while Settings → Terminal provides
a global default, paired repository and shell selectors for per-repository
overrides, and typography without changing the separate external
**Open in terminal** action. Linked worktrees share one override.

- **Review view (⌘5)** — read an agent's changes as whole files with the
edits inline, not isolated hunks. A file-tree queue tracks what you've
reviewed, a pinnable baseline captures everything since a commit —
including work the agent already staged or committed — and a change map
Expand Down Expand Up @@ -117,7 +134,7 @@ keyboard alone, and the mouse stays first-class.
builds recover the user's CLI `PATH` from the Unix login shell or persisted
Windows environment, so package-manager and version-manager installs work
without a custom path. Azure inline comments still need iteration tracking.
- **Worktrees (⌘5)** — an AI-agent dashboard for every worktree with stable
- **Worktrees (⌘6)** — an AI-agent dashboard for every worktree with stable
repo naming, branch/session labels, dirty count, ±lines, "touched 3m ago"
activity, disk size, ahead/behind, and one-click Review pinned where the
branch diverged from main. Worktree tabs of one repo group together instead
Expand Down Expand Up @@ -162,8 +179,8 @@ keyboard alone, and the mouse stays first-class.
- **Command palette (⌘K)** — fuzzy search across commands, branches, tags,
files, commits, and recent repos, with scope filtering and full keyboard +
screen-reader operability.
- **File view** — edit existing UTF-8 working-tree files with syntax
highlighting, or inspect read-only historical source; `--follow` history,
- **Work file documents** — edit syntax-highlighted working-tree files or
inspect historical source read-only; `--follow` history,
compare any two revisions, blame, and rendered previews for markdown and SVG; the Files tree
uses the local filesystem listing directly, including muted Git-ignored
paths, while overlaying current Git-state colors and recognizable language
Expand All @@ -186,8 +203,9 @@ keyboard alone, and the mouse stays first-class.
switching, and managing are all in ⌘K, including importing a VS Code
`.code-workspace`), native desktop menus (global on macOS, in-window on
Windows/Linux), open the repository or a chosen file in your editor, open a
terminal, settings (⌘,) for appearance / diff /
git / hosting / integrations / AI, in-app updates.
terminal, a configurable startup space, settings (⌘,) for appearance /
terminal / diff / git / hosting / integrations / AI, consistent
keyboard-native dropdowns, and in-app updates.
- **AI commit messages** — suggest subject + body from staged changes (or all
unstaged changes when nothing is staged) via
your ChatGPT subscription (Codex CLI, `gpt-5.6-luna`) or Claude Code CLI
Expand Down
Loading
Loading