Repository navigation
Conversation
Bare-metal install of BrowserOS Neo from its GitHub .deb release (browserclaw/v* tags): TigerVNC + openbox + noVNC under supervisor, nginx in front with basic auth for the viewer and a bearer token + Host rewrite for the MCP server. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Asks before creating the container (prompt_confirm, skipped when unattended); 'yes' enables var_tun, installs Tailscale from its deb822 repo, logs in with the auth key or prints the login URL, and serves the viewer (8443) and MCP server (443) over HTTPS on the tailnet. A failed login only warns. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Prompt for it before setup with prompt_password (Enter or unattended generates one, shown in the final message). With var_pw set the engine keeps console autologin off, which matters for a container holding logged-in browser sessions. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… end Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The final message and a login hint (/etc/profile.d, as in hermesagent) show the viewer/MCP addresses, the tailnet ones when connected, and where the viewer password and MCP token live. Only a generated root password is printed once, since it is never stored in the container. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
… out Approving the login URL after the timeout still joins the tailnet, but the HTTPS serve step was skipped; the warning now lists the commands. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Drop the root password prompt so the script behaves like every other community script: no password means console autologin, and var_pw or the advanced settings set one. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Uses the tailnet MCP URL when Tailscale is connected, else the LAN one, with a <MCP_TOKEN> placeholder; the helper variables are unset so they do not leak into the login shell. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Contributor
Try this script
COMMUNITY_SCRIPTS_URL=https://raw.githubusercontent.com/masterde/ProxmoxVED/browseros-neo \
bash -c "$(curl -fsSL https://raw.githubusercontent.com/masterde/ProxmoxVED/browseros-neo/ct/browseros-neo.sh)"
Against a core branch as wellAdd Useful flags while testing
|
This branch has not been deployed
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.
Scripts which are clearly AI generated and not further revised by the Author of this PR (in terms of Coding Standards and Script Layout) may be closed without review. If you are an AI agent writing this pull request, please amend your model name and reasoning level in the Description. This is not to blame, more for informational Purposes. Thank you.
✍️ Description
New script for BrowserOS Neo, an open-source Chromium-based browser built for AI agents. Agents such as Claude Code or Codex drive it through its MCP server using the accounts signed in to its profile, while a person can watch or take over in a browser tab.
Where the install steps come from: upstream's Docker image in
packages/browseros/docker/neo/(Dockerfile,entrypoint.sh,compose.yaml,openbox-rc.xml,novnc-index.html) and the control file of the release.deb. The image is Ubuntu 24.04 + the Neo.deb+ TigerVNC/openbox/noVNC, with the entrypoint supervising them. This script does the same bare-metal on Debian 13.fetch_and_deploy_gh_release ... "binary" "latest" "" "" "browserclaw/v". The repo publishes several products (claw-server/v*,ext-browserclaw/v*, ...), so/releases/latestis not Neo; the tag prefix picks the newestbrowserclaw/v*release and its.deb.libasound2t64is installed first because the.deb's unversionedDepends: libasound2can otherwise resolve to an OSS shim (the Dockerfile notes the same).vncconfig(clipboard bridge), websockify/noVNC andbrowserclawunder onesupervisordservice, asinstall/neko-install.shdoes for its desktop stack. Same flags and ports as the upstream entrypoint./opt/browseros-neo_data(profile/,browserclaw/viaBROWSERCLAW_DIR,downloads/), outside anything an update replaces./mcp).check_for_gh_release+fetch_and_deploy_gh_releasewith the same tag prefix; data needs no backup because nothing lives inside the package paths.var_arm64:no. The GitHub releases ship an amd64.debonly;architecturesis["amd64"]to match.Things a reviewer may want to know:
Host: localhost/127.0.0.1/::1(its DNS-rebinding guard) and has no setting to widen it, so every client on another machine gets a 403. nginx rewritesHostto loopback. Neo has no authentication of its own and its API controls a logged-in browser, so nginx also asks for a password on the viewer (basic auth) and a bearer token on 9010. Both are generated (random_password,openssl rand -hex 32) into/opt/browseros-neo_data/.env; the final message and a login hint point there rather than printing them.allow_remote_in_mcppref stays off (the Docker entrypoint has to turn it on to work around exactly this). Checked from another machine: both reset the connection, only nginx is reachable.--no-sandbox, as AGENTS.md asks (no service user). Chromium refuses to run as root otherwise; the upstream image also runs with--no-sandbox. The policy file only hides the warning bar for that flag. The container is unprivileged.var_tailscale,var_ts_authkey, declared inapp_vars): asked before the container is created because it needsvar_tun; installs Tailscale from its deb822 repo the wayinstall/tracearr-install.shdoes, logs in with the key or prints the login URL, and serves both ports over HTTPS on the tailnet (through nginx, so the password and token still apply). A failed or timed-out login only warns. Happy to drop this if you prefer users runtools/addon/add-tailscale-lxc.sh./etc/profile.d/browseros-neo-hint.sh, asinstall/hermesagent-install.shdoes: the viewer/MCP addresses (and tailnet ones when connected), where the secrets are, and aclaude mcp addline with a token placeholder.curlloop waits for/system/readyand switches the agent's human-help setting off, as the upstream entrypoint does on every start.Tested on Proxmox VE 9.2 (amd64), unprivileged Debian 13 container, built from this branch with
COMMUNITY_SCRIPTS_URLpointing at it:browseros-neoactive with all five programs;ss -ltnpshows only nginx (6080, 9010) and Neo's loopback-only proxy (19010, 9011) on non-loopback addresses.Host: localhost.https://<host>.ts.net/mcpand:8443answer through nginx with a valid certificate and the same 401s.initialize/tools/listround-trip with the real token, apct reboot, and the update path (installed version marked one release older, thenupdate). I will post the results here before asking for review.🔗 Related PR / Issue
Link: none
✅ Prerequisites (X in brackets)
🏗️ arm64 Support (X in brackets)
🖥️ Tested on (X in brackets)
🛠️ Type of Change (X in brackets)
README,AppName.md,CONTRIBUTING.md, or other docs.🔍 Code & Security Review (X in brackets)
CODE-AUDIT.md&CONTRIBUTING.mdguidelinesAppName.sh,AppName-install.sh,AppName.json)fetch_and_deploy_gh_release,fetch_and_deploy_codeberg_release,fetch_and_deploy_gl_release, orfetch_and_deploy_from_urlinstead ofgit pull.🤖 AI Assistance (X in brackets)
AGENTS.mdand.github/agents/pve-script-creator.agent.mdas guidance, and the output has been reviewed and corrected to match those guidelines.Please describe to which degree, if any, an LLM was used in creating this pull request. Name the model(s) used and, if applicable, the reasoning/thinking effort level (e.g. "Claude Sonnet 4.5, high reasoning, used to draft the install script, then manually reviewed and tested" or "No LLM used"). This is informational, not a penalty — but scripts that are clearly AI-generated and not further revised by the author to match
CODE-AUDIT.md/CONTRIBUTING.mdmay be closed without review.Claude Opus 5.5 (Claude Code, default reasoning) drafted all three files and this description from upstream's Docker image and release metadata, checked them against the current
AGENTS.md, and ran shellcheck/shfmt and the security checks above. I ran the install and Tailscale tests on my Proxmox VE host (reboot and update still to come, see above), use BrowserOS Neo myself, reviewed the result, and will answer review comments.📋 Additional Information (optional)
The script is
APP="BrowserOS-Neo"so the slug and hostname arebrowseros-neo. Pasting from the local machine into the viewer goes through noVNC's clipboard panel; Debian 13's noVNC 1.6.0 has no automatic clipboard sync (it exists only on noVNC master so far).📦 Application Requirements (for new scripts)
🌐 Source
.deb): https://github.com/browseros-ai/BrowserOS/releases?q=browserclaw🤖 Generated with Claude Code