{{ message }}
Repository navigation
feat: add experimental SSH remote workspaces for Claude workers - #366
Draft
singular78 wants to merge 3 commits into
Draft
singular78 wants to merge 3 commits into
singular78 wants to merge 3 commits into
Conversation
Owner
This was referenced Oct 8, 2026
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.

A provider command template can launch a CLI over SSH, but it does not transfer a task's workspace, return edited files, or make synchronization part of CCB completion. This adds an opt-in remote-workspace transaction boundary and a resumable SSH/tmux transport for pane-backed Claude workers. The local controller owns dispatch, callbacks, review and Git integration.
Implementation
remote_workspaceto agent configuration, serialization and stored specs. It selects a controller-owned profile outside the project, bound to a dedicated Git worktree. Local-only projects use a no-op synchronizer without importing the Linux transport..gitconfig/hooks,.ccb, provider homes or credentials. Default publication preserves local HEAD/index for native review and integration. Remote messages and returned code remain untrusted.Validation
SIGKILLat six synchronization and three terminal/reply/callback persistence windows, checking idempotent recovery and no duplicate execution/reply/continuation. Includes missing/changed launch baselines, piped-input preservation, configured-provider prerequisites, omitted-file rejection and symlink handling.git diff --checkpasses.becab71, excludingprovider_blackboxandccb_lifecycle_smoke: 7596 passed, 24 skipped, 42 deselected, 6 failed. All six failures reproduced on unmodified upstream18bf0af; all six passed in an ASCII checkout with the dependency-equipped Python onPATH/CCB_PYTHON. That full suite was not rerun after this hardening update; the current focused result is above.Separate prior prototype evidence (8.7.3-based acceptance branch): 480 regressions, three real SSH capacity/timeout-recovery cases, one normal VPS reboot with checkpoint recovery, and a real local Codex -> remote Claude -> file return -> review -> native integration flow ending
accepted / verified. The model flow included tool approvals and one fixture scope correction; it was not entirely unattended. These results are not fresh live SSH/model acceptance of this 8.7.5 PR tip, and overlapping test counts are not additive. Private deployment settings and raw model logs are not included.Scope and remaining limits
This remains an experimental draft: explicitly configured v2 agents, Linux/WSL2 controllers, Linux Claude workers, dedicated SHA-1 worktrees, linear history and ordinary files. Remote-originated CCB commands/passive reply delivery, merge histories, symlinks/submodules, dynamic/v3 remote provisioning and transparent project migration are unsupported.
Completion still holds the project chain lock during bounded synchronization (32 MiB object/file budget, 48 MiB wire budget). Large projects need streaming/incremental transfer and an asynchronous synchronization phase. Other writers must remain off the dedicated worktree: per-file conflict checks are not an atomic filesystem transaction against racing writers. The optional local verifier is separate; this interface does not sandbox arbitrary reviewer commands or the remote account. Preflight detects deployment drift, not compromise of a host or every wrapper subprocess.
Forced power loss during real model/tool execution, multi-day weak-network testing and multi-worker stress remain unverified. Upgrading an enrolled deployment requires reviewing/redeploying the endpoint, explicitly replacing its baseline and restarting an idle controller.
Upstream CI
On updated head
9e2d197, the Windows PR Isolation check still fails ondiff-marker:win32/diff-marker:windows. The trusted base checker classifies added/removed text, including unsupported-platform documentation and simulated platform tests, as Windows scope and then rejects shared paths. This patch changes no Windows-owned paths and adds noplatforms.windowsimports. Compatibility coverage and gate policy are retained; maintainer triage is needed.The updated Tests and CCBD Real Platform Smoke runs both report
action_requiredwith zero jobs started. Upstream CI has therefore not yet validated this draft; the passing results above are local validation.