feat(m5.7): panopticon start-runner — SSH + reverse tunnel + remote session service#249
Draft
tildesrc wants to merge 5 commits into
Draft
feat(m5.7): panopticon start-runner — SSH + reverse tunnel + remote session service#249tildesrc wants to merge 5 commits into
tildesrc wants to merge 5 commits into
Conversation
…ession service Adds `panopticon start-runner <host>` to the operator CLI. The command SSHes to a remote machine, opens a reverse port forward so the remote runner and its containers can reach the local task service, and starts `panopticon.sessionservice.host` there. The SSH session IS the tunnel; closing it stops the runner. Direct mode (`--no-tunnel`) skips the port forward for same-network deployments with a routable service URL. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…nstalls `python` is not on PATH on modern Linux. Default the remote interpreter to `python3` and expose `--python CMD` so operators can pass `uv run python` or a venv path. Multi-word values are split via shlex. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
…'t SSH The local session-service runner defaulted to socket.gethostname() as its registered host, causing the terminal supervisor to wrap every local-task attach in `ssh -t <hostname>`. Pass --host "" so runner_host stays null for locally-claimed tasks; remote runners (started via start-runner) keep their explicit --host <hostname>. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
--local runs the session service on the current machine without SSH and registers the runner with no hostname (--host ""), so locally-claimed tasks attach directly without SSH. Python defaults to sys.executable so the same venv is reused automatically. make start now uses `panopticon start-runner --local` instead of calling python -m panopticon.sessionservice.host directly, giving a unified operator entry point for local and remote runners alike. Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
Local mode runs the session-service argv directly via subprocess (no shell), so a literal ``~`` in the default roots reached Docker as a relative ``./~`` bind-mount source and made ``docker run`` fail with exit 125 (and littered a stray ``./~`` tree). Expand the roots against this machine's home in the local branch; remote/tunnel/direct modes keep the literal ``~`` for the remote login shell to expand. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
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.
Summary
panopticon start-runner <host>subcommand to the operator CLIsrc/panopticon/terminal/launch.py— pure command-construction functions (build_ssh_command,build_remote_host_command,start_runner) with injectablerunfor unit-testabilityGatewayPorts clientspecifiedin remotesshd_config--no-tunnel): no port forward; for same-network deployments with a routable service URLtests/test_launch.py; no real SSH/Docker/network requireddocs/start-runner.mdoperator guide covering both modes, GatewayPorts prerequisite, and keeping the runner alivePlan:
panopticon://tasks/09d0492751d1481f90ff267653a16c76/artifacts/plan.md🤖 Generated with Claude Code