Editor-agnostic remote workspace sandbox with SSH-backed execution and sync
Project description
remote-sandbox
remote-sandbox 将本地目录和 SSH 服务器上的目录绑定为一个双向同步工作区。编辑器和 AI 编码助手只操作本地文件,需要远程环境或算力时通过 rsb 执行命令。
正式命令只有 rsb。
- 本地和远程同时运行文件 watcher,修改会持续同步。
- 首次同步显示扫描、规划、传输和重放状态。
- 远程 shell 的提示符会动态显示同步状态,例如
[dev-server:project sync 40%]。 - 工具元数据保存在工作区之外,不会向项目目录写入
.remote-sandbox。 .git始终留在各自所在的一侧,不参与同步。
安装
推荐使用 uv 安装独立命令。
uv tool install remote-sandbox
rsb --help
也可以安装到当前 Python 虚拟环境。
python -m pip install remote-sandbox
rsb --help
升级已安装版本。
uv tool upgrade remote-sandbox
环境要求
本机需要 Python 3.11、3.12 或 3.13,以及 OpenSSH、rsync 和 tar。远程服务器需要 Python 3.10 或更高版本,以及 OpenSSH、bash、rsync 和 tar。
先确保普通 SSH 连接可用。建议在 ~/.ssh/config 中配置主机别名、用户、密钥、端口和跳板机。
Host dev-server
HostName server.example.com
User devuser
IdentityFile ~/.ssh/id_ed25519
remote-sandbox 调用系统 OpenSSH,不读取或复制私钥内容。
快速开始
直接绑定目录
在本地项目目录中执行。
cd ~/projects/project
rsb connect dev-server \
--remote ~/work/project \
--name project
确认本地和远程路径后,rsb 会立即建立绑定、启动两侧 watcher,并进入远程 shell。首次同步期间,方括号中的状态会原位更新。同步完成后提示符变为 [dev-server:project],shell 不会因为同步结束而自动退出。
如果只想建立绑定而不进入 shell,可以使用 --no-shell。
rsb connect dev-server \
--remote ~/work/project \
--local ~/projects/project \
--name project \
--no-shell
先浏览远程目录
不知道远程目录的准确路径时,可以先进入服务器。
cd ~/projects/project
rsb enter dev-server
在打开的远程 shell 中切换目录,然后发起绑定。
cd ~/work/project
rsb connect --name project
首次同步规则
新绑定只接受明确、可判断来源的目录状态。
- 本地非空、远程为空时,本地内容上传到远程。
- 本地为空、远程非空时,远程内容下载到本地。
- 两端都为空时,建立空工作区。
- 两端都非空且没有已验证的历史状态时,拒绝自动合并。
首次传输开始前 watcher 已经启动。扫描期间发生的新修改会进入事件 journal,并在初始快照传输后重放,避免初始化时间较长时漏掉修改。
查看状态和路径
rsb status
rsb status project
rsb status project --paths
rsb status project --watch
--paths 显示绑定的本地目录和 <SSH target>:<remote path>。--watch 持续刷新同步阶段、进度、待处理事件、冲突和错误。
常见阶段包括 initial-syncing、syncing、ready、degraded 和 failed。扫描尚未得到总文件数时显示 scanning 或 collecting,得到传输计划后才显示百分比。
执行远程命令
运行一条远程命令并返回它的退出状态。
rsb run project -- pytest -q
rsb run project -- python3 train.py
打开持续交互的远程 shell。
rsb shell project
如果工作区正在同步,从 rsb shell 打开的其他 shell 也会显示同一个动态状态前缀。
常用命令
rsb list
rsb status [name] [--watch] [--paths]
rsb start [name]
rsb stop [name]
rsb shell [name]
rsb run [name] -- <command>
rsb reconnect <name> [--local <path>] [--no-shell]
rsb conflicts [name]
rsb resolve <path> --use-local
rsb resolve <path> --use-remote
rsb fetch <path>
rsb fetch --all
rsb peek <path> --lines 40
rsb peek <path> --tail 40
rsb forget <name>
rsb forget <name> --local-only
给 AI 编码助手使用
Codex 推荐方式
安装 remote-sandbox 后执行一次。
rsb skill install
该命令把随软件发布的 skill 安装到 ${CODEX_HOME:-~/.codex}/skills/remote-sandbox。重新打开 Codex 任务后,只需要告诉 AI binding 名称。
使用 rsb 的 project binding 运行测试。
如果 Codex 当前就在绑定的本地目录中,也可以只说。
这个项目使用 rsb。修改代码并在远程运行测试。
skill 会先运行 rsb status --paths 自动确认 binding。本地文件仍由 AI 直接读取和编辑,需要项目环境或远程算力的命令通过 rsb run <name> -- <command> 执行。只有明确需要人工交互终端时才使用 rsb shell。
升级 remote-sandbox 后,可以更新已安装的 skill。
rsb skill install --force
不再需要时可以卸载。
rsb skill uninstall
如果 skill 文件被手动修改,卸载会先保护这些修改并提示使用 --force。卸载只处理 rsb 管理的文件,不会递归删除同一目录中的其他文件。
其他 AI 编码助手
不支持 Codex skill 的工具可以读取项目根目录的 AGENTS.md。加入以下规则后,不需要在每次任务中重复完整提示。
## Remote execution
This project is bound through remote-sandbox as `project`.
- Read and edit only the local working tree.
- Check the binding with `rsb status project --paths`.
- Run commands that need the project environment or remote compute with `rsb run project -- <command>`.
- Do not edit the remote workspace directly over SSH.
- Report remote command failures separately from synchronization warnings.
AI 编辑代码时仍然直接操作当前本地目录。需要远程依赖、GPU、编译器或测试环境时执行如下命令。
rsb run project -- pytest -q
rsb run 会返回远程命令的标准输出、标准错误和退出状态,比让 AI 驱动交互式 rsb shell 更稳定。
忽略规则和占位文件
在项目根目录创建默认 .rsbignore。
rsb init
普通规则表示忽略。[placeholder] 后的规则表示大文件只在本地保留占位信息,需要时再获取。
.venv/
__pycache__/
.pytest_cache/
node_modules/
[placeholder]
checkpoints/
设置全局占位阈值。
rsb set placeholder-limit 100MB
peek 只读取远程文件的开头或结尾。fetch 会拉取并验证占位文件。
冲突处理
当本地和远程在同一基线之后修改了同一路径时,rsb 保留两侧内容并记录冲突,不会静默覆盖。
rsb conflicts project
rsb resolve path/to/file --use-local
rsb resolve path/to/file --use-remote
元数据和清理
项目目录中不会创建 .remote-sandbox。本机状态默认保存在以下位置。
~/.remote-sandbox/config.toml
~/.remote-sandbox/connections.toml
~/.remote-sandbox/workspaces/<workspace-id>/workspace.toml
~/.remote-sandbox/workspaces/<workspace-id>/state.sqlite3
~/.remote-sandbox/workspaces/<workspace-id>/daemon.log
socket 和 SSH control master 位于 /tmp/remote-sandbox-<uid>/。远程 agent 和 workspace 状态位于 ~/.remote-sandbox/,同样不在远程项目目录内。
测试或隔离环境可以使用 REMOTE_SANDBOX_HOME、REMOTE_SANDBOX_RUNTIME_DIR 和 REMOTE_SANDBOX_CONNECTIONS 覆盖默认位置。
正常删除绑定。
rsb forget project
该命令停止本地 supervisor 和远程 watcher,删除两侧工具元数据及连接记录,但不会删除本地或远程项目文件。
远程服务器不可达时,可以只清理本机记录。
rsb forget project --local-only
命令会报告仍留在远程的工具元数据位置,方便服务器恢复后手动处理。
源码开发
git clone https://github.com/jiang7f/remote-sandbox-cli.git
cd remote-sandbox-cli
uv sync --locked
uv run rsb --help
运行代码质量检查和测试。
uv run ruff check .
uv run mypy src
uv run pytest
从当前源码安装可编辑命令。
uv tool install --editable .
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file remote_sandbox-0.2.4.tar.gz.
File metadata
- Download URL: remote_sandbox-0.2.4.tar.gz
- Upload date:
- Size: 140.4 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
9b5bc1f8afc91662512ad971d30e19ad2eff32f779b04196dd3b3833a44231e6
|
|
| MD5 |
a159bb903c7686bc7c9e91f649fd2eec
|
|
| BLAKE2b-256 |
aa75c2e6178837493c78af0b56199e8a84c568d1090f1b1aaede5697209cb271
|
File details
Details for the file remote_sandbox-0.2.4-py3-none-any.whl.
File metadata
- Download URL: remote_sandbox-0.2.4-py3-none-any.whl
- Upload date:
- Size: 163.2 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: uv/0.11.26 {"installer":{"name":"uv","version":"0.11.26","subcommand":["publish"]},"python":null,"implementation":{"name":null,"version":null},"distro":{"name":"macOS","version":null,"id":null,"libc":null},"system":{"name":null,"release":null},"cpu":null,"openssl_version":null,"setuptools_version":null,"rustc_version":null,"ci":null}
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
553142394eb80dfaed27cdd77d8126acffa79b36a2d6aa6da064e56a597ae9eb
|
|
| MD5 |
2c8aaa0b153ee9bb235aada2b6837c43
|
|
| BLAKE2b-256 |
7ed423a10474a7671b5c71488f734d65636a41809eec6fb1c1764ebb2909b762
|