diff --git a/README.md b/README.md index 33fb90ee..9dc0b386 100644 --- a/README.md +++ b/README.md @@ -516,7 +516,7 @@ Point a case at another machine and run the agent **there**, over SSH, with the - **Discover & attach**: list the `codeman-*` sessions already running on a host (started by that machine's own Codeman, or by another operator) and attach to one. Attached sessions you don't own **detach on tab close, never kill**. - **Shared sessions**: several clients can attach the same remote session at different window sizes without clamping each other; discovery shows a "shared" badge with the client count. - **Injection-safe**: every ssh command line flows through a single shell-escaping builder, and host/path/identity fields are schema-guarded. -- **Files too**: previews, downloads and text reads in a remote case go over the same ssh connection (one `realpath` + `stat` probe, then a streamed `cat`, `Range` seeking included), so a clicked path opens the file on the machine the agent is on. Nothing is copied to the Codeman host; editing and Office previews answer a clear 400 instead of a misleading 404. +- **Files too**: previews, downloads and text reads in a remote case go over the same ssh connection (one `realpath` + `stat` probe, then a streamed `cat`, `Range` seeking included), so a clicked path opens the file on the machine the agent is on. Nothing is copied to the Codeman host apart from the diffs the Edit history panel keeps; editing and Office previews answer a clear 400 instead of a misleading 404. - **Full scrollback**: loading a remote session's history reads it from the remote tmux in one bounded ssh round trip, so a session keeps its whole scrollback after a reattach or a tab switch, with no rows lost where the history meets the live screen. Set it up under **New Case → Remote** (host, user, identity file, optional jump host). Full design: [`docs/remote-sessions.md`](docs/remote-sessions.md). diff --git a/docs/wiki/Remote-SSH-Sessions.md b/docs/wiki/Remote-SSH-Sessions.md index 29354bf2..376b5ef6 100644 --- a/docs/wiki/Remote-SSH-Sessions.md +++ b/docs/wiki/Remote-SSH-Sessions.md @@ -77,9 +77,11 @@ clamping each other, and discovery shows a shared badge with the client count. Previews, downloads and text reads in a remote case go over the same ssh connection the session uses, so a clicked path opens the file on the machine the agent is on, `Range` -seeking included. Nothing is copied to the Codeman host. Editing, Office previews, -thumbnails, the file tree and the tail viewer are not available remotely and answer a clear -400 rather than a misleading 404. Details in [Working With Files](Working-With-Files). +seeking included. Nothing is copied to the Codeman host, apart from the diffs the +[Edit history](Working-With-Files#edit-history) panel keeps, which works for remote Claude +sessions too. Editing, Office previews, thumbnails, the file tree and the tail viewer are not +available remotely and answer a clear 400 rather than a misleading 404. Details in +[Working With Files](Working-With-Files). ## Security diff --git a/docs/wiki/Security.md b/docs/wiki/Security.md index 678e1ff6..b8d41d64 100644 --- a/docs/wiki/Security.md +++ b/docs/wiki/Security.md @@ -68,7 +68,7 @@ be wrong for at least one of them: | **File Viewer** | Real path resolution before boundary checks, so symlinks cannot escape. Sensitive trees blocked. Edit mode adds an extension allowlist, a size cap, `.git` denial, and optimistic concurrency. It never creates files. | | **Attachments** | An id-based registry, so browser requests never carry absolute paths. The magic-link scanner is prompt-injectable by nature and is therefore force-confined to the session's workspace. Extension allowlist, not a blocklist. | | **Path picker** | Its own root allowlist rather than the workspace confinement. In multi-user mode a non-admin gets only their own user space, because per-user spaces live inside the home directory. | -| **Remote cases** | Reads go over the session's own ssh connection and are resolved and contained on the remote host, with a bounded number of ssh children. Nothing is copied to the Codeman host; writes, Office previews and thumbnails are refused. | +| **Remote cases** | Reads go over the session's own ssh connection and are resolved and contained on the remote host, with a bounded number of ssh children. Nothing is copied to the Codeman host, apart from the diffs the Edit history panel reads from a remote Claude session's transcripts while it is open, kept in a private bounded store (0600) that is deleted with the session's record. Writes, Office previews and thumbnails are refused. | Downloads block sensitive paths outright (`.env`, credentials files, `~/.ssh`, AWS credentials), and SVG and HTML are served as downloads with `nosniff` so they cannot execute