Allow "Remote"-ing to Executor Web Dashboard#261
Merged
RhysSullivan merged 3 commits intoRhysSullivan:mainfrom Apr 17, 2026
Merged
Allow "Remote"-ing to Executor Web Dashboard#261RhysSullivan merged 3 commits intoRhysSullivan:mainfrom
RhysSullivan merged 3 commits intoRhysSullivan:mainfrom
Conversation
mrzmyr
reviewed
Apr 16, 2026
Contributor
mrzmyr
left a comment
There was a problem hiding this comment.
Claude Code Review (Opus 4.6)
Clean PR — the feature makes sense and the implementation is minimal. Two things I'd fix:
1. Display URL is broken when using --exposed
When --exposed sets hostname to 0.0.0.0, the console prints http://0.0.0.0:4788 which doesn't work in a browser. Should still display localhost:
const displayHost = hostname === "0.0.0.0" ? "localhost" : hostname;
const baseUrl = `http://${displayHost}:${server.port}`;2. --exposed silently overrides --hostname
If someone passes --hostname 10.0.0.5 --exposed, the hostname is quietly ignored. These should either be mutually exclusive (error if both provided) or --exposed should only control disableHostCheck without touching hostname.
886771c to
7565aaa
Compare
Drop the kill-switch that bypassed the Host-header allowlist entirely. Instead, let the user extend the allowlist explicitly via repeatable --allowed-host flags. Localhost/127.0.0.1 remain always allowed. This preserves the DNS-rebinding protection when binding to 0.0.0.0: an attacker's site still can't target the executor unless it can forge a Host header that the user has explicitly permitted. Also: - log a warning when binding to a non-localhost address - show "localhost" in the printed baseUrl when bound to 0.0.0.0 (the literal 0.0.0.0 isn't a visitable URL)
Owner
|
Swapped it to:
|
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.
What Changed
Added
--hostnameand--exposedCLI flags toexecutor web:--hostname <addr>changes theBun.servebind address (default:127.0.0.1)--exposedbinds to0.0.0.0and disables the host allowlist check, allowing remote access from non localhost clientsWhy
When running
executor webin Docker or on a remote machine (ex. trying to access over Tailscale), the server needs to bind to0.0.0.0instead of127.0.0.1, and theisAllowedHostcheck must be bypassed since non localhostHostheaders get rejected with403.Impact
Two files changed:
apps/local/src/serve.tshostnameanddisableHostChecktoStartServerOptionsBun.serve()and host check logicapps/cli/src/main.ts--hostnameand--exposedflags to thewebcommandstartServer()Default behavior unchanged:
executor webwith no flags behaves identically to upstream.Validation
bun vitest runbun run apps/cli/src/main.ts web --help--hostnameand--exposedexecutor web --exposed0.0.0.0Hostheaders return200executor web127.0.0.1Hostheaders return403Notes
This PR was vibe-coded with with Opencode + Oh-my-Openagent + GLM-5.1 / GLM-5-Turbo.
The
--hostnameflag might not be necessary. If you are going to host this on a custom domain / IP, you could instead use the--exposedflag, then containerize + reverse proxy, etc., instead of putting that burden on this repo / maintainers moving forward.I am not that familiar with networking stuff so correct me if I am wrong here...
Feel free to checkout the branch and push changes accordingly.