From 962aa9b998e0cdcc0566fc283071c37732f9c404 Mon Sep 17 00:00:00 2001 From: Codeman maintainer Date: Fri, 6 Nov 2026 03:49:59 +0100 Subject: [PATCH] fix: the remote docs name the Edit history diffs as the exception (release review) "Nothing is copied to the Codeman host" stopped being true when the Edit history panel started keeping diffs read from a remote session's transcripts. The README, the wiki's Remote SSH Sessions page and its Security page now name that exception, in the wording the PR already uses on Working With Files and in remote-sessions.md. Co-Authored-By: Claude Opus 5.5 --- README.md | 2 +- docs/wiki/Remote-SSH-Sessions.md | 8 +++++--- docs/wiki/Security.md | 2 +- 3 files changed, 7 insertions(+), 5 deletions(-) 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