26 min read

Self-Host Orb and sandboxed.sh with Docker

Install and verify Orb’s sandboxed.sh backend with Docker, connect Orb clients, then expose the confirmed local HTTP endpoint with Localtonet.

Self-Hosting ยท Orb and sandboxed.sh ยท Docker ยท Localtonet ยท 2026

Deploy a reproducible Orb backend, prove persistence locally, then open only the client-facing endpoint

Orb is the macOS and iOS client experience, while sandboxed.sh is the self-hosted backend that stores projects, missions, event history, and remote execution state. This tutorial uses the Orb v0.12.0 release at commit 33c0345 as a reproducible baseline, shows the Docker Compose lifecycle, and explains how to inspect the resolved deployment instead of assuming ports or storage paths. You will verify sign-in, project persistence, logs, shutdown, backup, restore, and upgrades before adding a Localtonet HTTP tunnel. Commands and behavior were reviewed against the available Orb repository and documentation evidence in 2026.

๐Ÿ”’ Treat agent execution as a host trust boundary ๐ŸŒ Publish only the verified Orb client endpoint โšก Pin, inspect, test, back up, then expose
Docker host running the sandboxed.sh backend for Orb with a Localtonet tunnel for remote client access
Build and verify the Docker deployment first. Localtonet is a separate access layer for the confirmed client-facing service.

Understand the Orb and sandboxed.sh architecture

Orb client connecting to the sandboxed.sh backend and an execution environment on a Docker host
Orb reads and steers work through the backend, while execution can occur on a client, the core Linux server, a remote node, or a connected cloud service.

Orb and sandboxed.sh are related but distinct parts of the deployment. Orb provides the macOS and iOS interfaces. The project formerly called sandboxed.sh is now the backend to those clients. According to the current Orb documentation, the Rust backend owns projects, missions, event history, and remote-node coordination. Closing a client therefore does not make the backend disposable.

Orb separates where a user reads and steers a mission from where its agent executes. The currently documented execution modes are:

Mode Execution location Operational consequence
Your computer Locally on a Mac through Orb's Tauri runner The local files, tools, installed harness, and existing CLI login belong to that Mac.
Your private cloud The core Linux server or a registered remote node Work can run in configured host directories or isolated systemd-nspawn containers with cgroup resource caps.
Cloud agents A coordinator or provider-managed service Hermes, ChatGPT, Grok Bot, and Cursor Cloud use their own connection and authentication paths.

The v0.12.0 release used as the baseline in this tutorial includes the backend changes described in that release, including updated mission state handling and storage migrations. The public documentation has continued to evolve beyond that release. Pinning commit 33c0345 makes the deployment reproducible, but it also means that features documented only on a newer master revision may not exist in this baseline.

๐Ÿ–ฅ๏ธ Orb clients macOS and iOS clients connect to a sandboxed.sh server URL and use the same server-backed project and mission records.
๐Ÿ—„๏ธ Backend state The backend retains projects, missions, event history, and coordination data, so its persistent storage must survive container replacement.
โš™๏ธ Execution placement Agent execution may happen on a Mac, the core server, a registered node, or a separate cloud service.
๐Ÿ”Œ Provider integrations Model providers and subscription connections are separate from backend sign-in and should be configured after the core deployment works.
๐Ÿ“ก Client-facing URL Orb needs the application endpoint intended for clients, not an internal database, Docker API, or Compose-only service name.
๐Ÿ” Multiple trust boundaries Backend accounts, provider credentials, machine credentials, agent workspaces, and Localtonet device tokens must be protected separately.
A healthy backend is not a working agent environment

Container health proves only that the deployed services can start. It does not prove that a particular harness, model provider, remote machine, cloud-agent account, or workspace is ready. Verify the server first, then add one execution integration at a time.

Prepare the Docker host

Use a Linux host that can remain available whenever Orb clients need the backend. This guide follows the repository's Docker path and does not mix it with the separate native Linux installation. You need Git, Docker Engine, and the Docker Compose plugin. Your account must be authorized to run Docker commands.

Check the tools before cloning the project:

git --version
docker version
docker compose version

Docker privileges are security-sensitive. Membership in a group that can control the Docker daemon commonly grants broad control over the host. Do not give routine Orb users shell access to the Docker account, and do not expose the Docker daemon through Localtonet.

Also prepare:

  • A dedicated deployment directory with restricted access.
  • Sufficient storage for images, backend data, logs, projects, and any server-side workspaces you enable.
  • A backup destination that is not the same Docker volume or physical disk as the live deployment.
  • An authorized Orb account or bootstrap path defined by the selected release.
  • A Localtonet client device that can reach the final client-facing host address and port.
Do not treat agent containers as a complete security boundary

Agents can read files, invoke tools, execute commands, and communicate over the network according to the permissions you give them. A control component with Docker daemon access can generally create privileged containers, mount host paths, or alter other workloads. Use a dedicated host or virtual machine when agent workloads should not be trusted with the rest of the machine.

Install the pinned Orb release with Docker Compose

The Orb repository contains the root Dockerfile, docker-compose.yml, .env.example, and INSTALL.md files used by the Docker workflow. The following checkout pins v0.12.0 at commit 33c0345 instead of silently deploying a moving development branch.

1

Clone the Orb repository

Clone the official repository into a dedicated directory, then enter it.

git clone https://github.com/Th0rgal/orb.git
cd orb
2

Check out and verify v0.12.0

Fetch tags, select the release, and verify that the checked-out commit matches the published release commit.

git fetch --tags
git checkout v0.12.0
git rev-parse --short HEAD
git status --short --branch

The short revision should identify 33c0345, and the working tree should be clean before local configuration is added.

3

Create the environment file

Copy the example belonging to the pinned release. Keep the populated file out of commits and backups that are not encrypted.

cp .env.example .env
chmod 600 .env
4

Validate the resolved Compose project

Have Compose parse the release files before building anything. This detects invalid interpolation and missing values required by Compose.

docker compose config --quiet
docker compose config --services
docker compose config --volumes
docker compose config --images
5

Build and start the deployment

Build from the pinned source and start the Compose services in the background.

docker compose up -d --build
6

Inspect status and startup logs

Confirm that services remain running and review the first startup for configuration, migration, permission, or bind errors.

docker compose ps
docker compose logs --tail=200

Keep the initial terminal output. It is useful when comparing a later restart or upgrade. A container that repeatedly changes from running to restarting is not a successful installation, even if docker compose up returned without an immediate shell error.

Configure required values and inspect the actual deployment

Separate core settings from optional providers

Use the checked-out .env.example and INSTALL.md as the configuration schema for v0.12.0. Do not copy environment names from a newer master revision into the release without checking whether that release recognizes them. Conversely, do not delete an unfamiliar release variable merely because it is absent from a newer article.

A value is mandatory for this deployment when the pinned installation instructions require it, the Compose interpolation marks it as required, or startup fails with an explicit missing-setting error. Optional provider integrations should remain unset until the server, sign-in, and persistence checks pass.

Configuration category When it is required How to handle it
Core Compose values When required by the pinned Compose file or installation instructions Set them before startup and confirm them with docker compose config --quiet.
Authentication values When required by the release's sign-in or account bootstrap flow Generate and store them privately. Do not disable authentication for remote access.
Storage settings When the Compose deployment uses configurable paths or named volumes Confirm permissions and include every persistent location in the backup plan.
Provider credentials Only for providers you intentionally connect Add them after basic backend validation and never commit them.
SANDBOXED_OAUTH_OWNER Only for the documented CLIProxyAPI OAuth ownership workflow cli-proxy assigns supported OAuth refresh ownership to CLIProxyAPI. It is not a universal core-server requirement.

Current Orb documentation explains that SANDBOXED_OAUTH_OWNER=cli-proxy lets CLIProxyAPI own OAuth token refresh for supported provider accounts, avoiding refresh-token races between processes. That setting affects model inference routing and OAuth ownership. It does not create an Orb backend account, sign in a ChatGPT browser profile, or create a Cursor Cloud API account.

Identify the client-facing service and published port

Do not assume a port number from a different release. Use the active Compose project to print the real host mappings:

docker compose ps
docker compose ps -q | xargs -r docker inspect \
  --format '{{.Name}} {{range $port, $bindings := .NetworkSettings.Ports}}{{$port}} -> {{range $bindings}}{{.HostIp}}:{{.HostPort}} {{end}}{{end}}'

The first command associates Compose service names with their state and published ports. The second distinguishes container ports from host addresses and ports. Record the mapping for the service intended to receive Orb client traffic.

If no host port appears, the service is not directly published by Docker. Check the pinned Compose file for a bundled reverse proxy or another documented entry point. Do not create an arbitrary port mapping until you understand which service provides authentication and client routing.

Inspect mounts and persistent volumes

List the declared volumes and then inspect the running containers:

docker compose config --volumes

docker compose ps -q | xargs -r docker inspect \
  --format '{{.Name}}{{range .Mounts}}{{printf "\n  %s: %s -> %s" .Type .Source .Destination}}{{end}}'

This shows the actual source and destination of named volumes and bind mounts. Mark a location as persistent if it contains the backend's projects, missions, event records, account state, configuration, or workspaces that must survive image replacement. Temporary build caches do not necessarily require the same backup treatment.

Inspect whether a container mounts /var/run/docker.sock or another Docker daemon endpoint. If it does, treat that container as a host-privileged control component. Compromise of that component may become compromise of the Docker host.

Check health checks and dependencies

Use Compose status to see whether a health state is reported:

docker compose ps
docker compose ps -q | xargs -r docker inspect \
  --format '{{.Name}} health={{if .State.Health}}{{.State.Health.Status}}{{else}}not-declared{{end}} restart={{.RestartCount}}'

A reported healthy result is useful, but it is not a substitute for an Orb sign-in and persistence test. A health check can prove that a process responds while an authentication, migration, storage, or event-stream path remains broken.

Do not publish every Compose port

Orb clients need the documented application endpoint. Databases, Docker APIs, machine-control channels, internal coordination services, and provider proxies are separate interfaces. Publishing them can bypass the backend layer that provides authentication and application routing.

Verify the server, sign-in, and persistence locally

Docker service status and a successful local application response used to verify the Orb backend
Container state, application reachability, client sign-in, and persistent records are separate acceptance checks.

Test the discovered endpoint

Convert the published mapping into a local URL. If Docker reports a plain HTTP mapping such as 127.0.0.1:PUBLISHED_PORT or 0.0.0.0:PUBLISHED_PORT, test that exact port from the Docker host:

curl --fail --show-error --location --verbose \
  http://127.0.0.1:PUBLISHED_PORT/

Replace PUBLISHED_PORT with the value printed by Docker. If the pinned deployment documents HTTPS at the local entry point, use its documented HTTPS URL instead of changing the scheme merely to make the command succeed. Certificate validation failures should be resolved according to the deployment's TLS design, not hidden with a permanent insecure option.

A redirect or authenticated application response can be valid. A response from an unrelated dashboard, database console, or development server is not. Watch the Compose logs while making the request:

docker compose logs --follow

Stop log following with Ctrl+C. This does not stop the containers.

Bootstrap authentication and sign in

The documented Orb client workflow is to run the sandboxed.sh backend, open Orb, enter the server URL, and sign in. The supplied v0.12.0 evidence does not expose a release-specific username, password, invitation command, or fixed default credential. Do not invent one and do not search logs for a reusable password unless the pinned installation instructions explicitly direct that procedure.

Complete the account bootstrap defined by the checked-out release's INSTALL.md or first-run interface. Then enter the locally reachable server URL in Orb and sign in. A valid acceptance test should establish all of the following:

  • An unauthorized request does not reveal project or mission data.
  • An authorized Orb client can sign in without a repeated authentication loop.
  • The client loads server-backed project views.
  • The backend logs show requests reaching the expected application service.
No documented default credential is established by the reviewed evidence

Do not use a guessed administrator account or leave the service unauthenticated. If the pinned release does not present a clear bootstrap flow, keep it private and resolve the account setup from that release's installation material before creating a tunnel.

Create a first project and mission

In Orb, create a small test project and confirm that it appears after refreshing or reconnecting the client. Then choose one execution mode whose prerequisites are already available. For example, a local Mac run requires an installed local harness and its own login. A private-cloud run requires the target machine and workspace to be configured. Provider-backed modes require the relevant provider connection.

Launch a harmless first mission, inspect its transcript, and send a follow-up. This tests more than the landing page because it exercises server records and the selected execution path. Do not grant broad source-code, credential, or production-system access merely to complete this check.

Test persistence across restart

Restart the Compose services without deleting volumes:

docker compose restart
docker compose ps
docker compose logs --tail=200

Sign in again and verify that the test project, mission, and transcript still exist. If they disappear, stop and correct the storage configuration before using the server for important work.

A stronger lifecycle test stops and recreates the containers while retaining declared volumes:

docker compose down
docker compose up -d
docker compose ps

Do not add --volumes to the shutdown command unless you intentionally want to delete Compose-managed volumes. After recreation, repeat the sign-in and project checks.

Expose the verified Orb endpoint with Localtonet

Remote Orb client traffic passing through a Localtonet HTTP tunnel to the verified local backend endpoint
Localtonet forwards the public address to the same local application endpoint that passed the Orb sign-in and persistence checks.

For a client-facing endpoint verified as ordinary local HTTP, use a Localtonet HTTP tunnel. Our client establishes an outbound connection to a Localtonet relay server, so this workflow does not require inbound router port forwarding, a public IP address, VPN setup, or an inbound firewall change.

If the local entry point is actually HTTPS or another TLS service, do not describe it as HTTP. Confirm where TLS terminates and use the compatible Localtonet tunnel family. The steps below assume your verified Orb target is an HTTP service at a local IP address and published host port.

The current workflow is also described in the Localtonet HTTP tunnel documentation.

1

Install and run the Localtonet client

Run our client on the Docker host or on another device that can reach the verified Orb HTTP address and port.

2

Select the client device

Use the device-specific authentication token for the client that will carry the tunnel. Keep the token secret and out of the Orb repository, environment file, screenshots, and logs.

3

Select an available relay server

Choose a current server or region in the dashboard. Obtain available values from the product instead of copying a hardcoded server code.

4

Create the HTTP tunnel configuration

Enter the local IP address and published host port that passed your Orb verification. Choose Random Sub Domain, Custom Sub Domain, or Custom Domain where available. These process types serve the same content at a public HTTPS address.

5

Start the tunnel

Creating the tunnel does not start it. Press Start and wait for the selected Localtonet client and tunnel to report their active state.

6

Use and later stop the public endpoint

Enter the assigned public HTTPS URL in the remote Orb client. When remote access is no longer required, stop the tunnel or delete it. The address is available only while the selected client is connected and the tunnel is running.

Verify from a genuinely external network

Do not test only from the Docker host or the same Wi-Fi network. Disable Wi-Fi on a mobile device and use cellular connectivity, or test from another independent internet connection. Open the Localtonet URL and confirm that the expected sign-in boundary appears.

Next, enter the public URL in Orb, sign in, open the test project, inspect the previous mission, and perform a small authorized write operation such as adding a follow-up. Confirm that the change remains visible after reconnecting. Review backend logs during the external test:

docker compose logs --follow

A browser page alone is not sufficient. Orb may use API requests or long-lived event streams that a simple root-page request does not exercise. The client workflow is the meaningful test.

Public reachability changes the threat boundary

Start the tunnel only after authentication works locally. Expose the client-facing application service, not the Docker socket, databases, provider proxies, remote-machine control ports, or unauthenticated development interfaces. Stop or delete temporary tunnels when the remote session ends.

Harden the host and agent execution boundary

Self-hosting an agent system requires more than protecting its web login. A coding agent can receive instructions, inspect workspaces, execute tools, modify files, and make network requests according to the permissions of its execution environment. Backend compromise and workload compromise can therefore have consequences beyond disclosure of a transcript.

๐Ÿณ Docker daemon boundary A component with access to the Docker daemon can often create privileged workloads or mount host files. Restrict daemon access to trusted control components.
๐Ÿ“ Workspace boundary Mount only the repositories and directories required for the mission. Do not expose an entire home directory by default.
๐Ÿ”‘ Credential boundary Keep backend secrets, provider tokens, SSH material, CLI sessions, and Localtonet tokens separate and grant only what each execution mode needs.
๐ŸŒ Network boundary Limit outbound and lateral access where practical. An isolated filesystem does not prevent a workload from reaching exposed network services.
๐Ÿ‘ค User boundary Use individual authorized accounts and remove access when it is no longer required. Do not share a permanent administrator login.
๐Ÿงช Trust classification Run unknown or hostile workloads on separate infrastructure with a stronger isolation design instead of relying solely on an ordinary shared Docker host.

Protect Docker and the control plane

Do not publish a Docker TCP endpoint or tunnel /var/run/docker.sock. If the Orb deployment mounts the socket into a management component, restrict who can alter that container, its image, its environment, and its mounted configuration. Use a dedicated host or virtual machine so that a compromise does not expose unrelated services.

Constrain agent workspaces

Give each execution environment only the files required for its task. Exclude password stores, SSH directories, cloud configuration, browser profiles, production environment files, and unrelated repositories. Review symlinks as well as direct mounts because a workspace path can otherwise lead outside its intended directory.

Orb documents private-cloud runs in host directories or isolated systemd-nspawn containers with cgroup resource caps. Resource caps reduce the effect of runaway CPU or memory use, but they do not automatically make arbitrary code trustworthy. Filesystem permissions, network policy, credentials, kernel exposure, and control-plane privileges remain relevant.

Keep integrations separate

Provider OAuth, API keys, backend accounts, cloud-agent sessions, and machine credentials serve different purposes. A provider token should not be reused as an application secret. A Localtonet device token should not be stored in the Orb environment file. A machine SSH key should not be copied into every mission workspace.

Log enough information to investigate failed authentication, startup, provider, and mission events, but avoid storing raw secrets or complete authorization headers. Restrict access to Compose logs because applications and third-party tools may occasionally write sensitive values during errors.

Back up, restore, restart, and upgrade safely

Routine status, logs, and restart commands

docker compose ps
docker compose logs --tail=200
docker compose restart
docker compose ps

Diagnose local service health before changing Localtonet. If the local Orb URL works but the public URL fails, inspect the Localtonet client and tunnel. If the local URL also fails, resolve the Docker or backend problem first.

Stop without deleting persistent data

To stop and remove the Compose containers and network while retaining declared volumes:

docker compose down

To start the same pinned deployment again:

docker compose up -d
docker compose ps

Avoid docker compose down --volumes during routine maintenance. That option requests deletion of Compose-managed volumes and can destroy backend state.

Back up the deployment

First use the mount-inspection command from the configuration section to identify every persistent named volume and bind-mounted data directory. Back up:

  • The persistent backend data that contains projects, missions, events, account state, or migrations.
  • Any durable workspaces that your recovery policy requires.
  • The deployment's configuration and a protected copy of required secrets.
  • The exact Git revision and container image identifiers used by the deployment.

For a consistent offline backup, stop the application before copying its persistent data:

docker compose stop
docker compose ps

Copy each inspected bind-mounted directory or export each named volume with your organization's tested Docker volume backup procedure. The exact archive command depends on the actual source paths and volume names printed by this deployment, so do not substitute a guessed volume. Restart after the backup:

docker compose start
docker compose ps

Test restoration

A backup is not proven until it restores. On an isolated host, check out the same commit, restore the protected environment configuration and persistent data to their corresponding paths or volumes, and start Compose. Then sign in and verify the test project, mission transcript, and execution configuration.

Do not perform the first restoration test over the live data set. A wrong mount target can cause the application to initialize empty storage, which may look like a successful startup while all expected records are absent.

Upgrade deliberately

Record the current state before changing versions:

git rev-parse HEAD
docker compose ps
docker compose images

Back up persistent data and configuration, then fetch the intended tag:

git fetch --tags
git checkout NEW_VERIFIED_TAG
docker compose config --quiet
docker compose build
docker compose up -d
docker compose ps
docker compose logs --tail=200

Replace NEW_VERIFIED_TAG only with a release you have reviewed. Read its release notes for migrations, renamed environment variables, changed mounts, or client compatibility requirements. Do not use an unpinned development branch as an unattended production upgrade strategy.

After upgrading, repeat the full local acceptance test before enabling remote access: endpoint response, sign-in, project loading, persistence, and one small mission. Then start or retest the Localtonet tunnel.

Troubleshoot Docker, Orb, and Localtonet systematically

Compose reports a missing variable

Confirm that .env was created from the .env.example included in the checked-out release. Run docker compose config --quiet again. Do not solve the error by assigning a random value to a secret, database location, public URL, or authentication setting.

A service exits or restarts repeatedly

Run docker compose ps and inspect docker compose logs --tail=200. Start with the first fatal error rather than later connection failures. Common categories include invalid configuration, inaccessible mounts, failed migrations, missing dependencies, and occupied ports.

The service runs, but no host port is listed

The container may be reachable only inside the Compose network, or another service may be the intended reverse proxy. Inspect docker-compose.yml at the pinned revision and identify the documented client entry point. Do not tunnel an internal service merely because it responds inside Docker.

The endpoint works on the host but not on another LAN device

A mapping bound to 127.0.0.1 is local to the Docker host. That is compatible with a Localtonet client running on the same host. A Localtonet client on another machine needs a backend address reachable from that machine and permitted by local firewall policy.

Orb reaches the server but cannot sign in

Confirm that the client is using the intended backend URL and not an unrelated web service. Review authentication-related backend logs and the account bootstrap instructions for the pinned revision. Keep the service private while fixing account, URL, clock, or configuration problems.

Projects disappear after a restart

Inspect the container mounts and compare them with the locations that hold backend state. Data may have been written to an ephemeral container layer, or a bind mount may point at the wrong empty directory. Stop creating important projects, correct the mount, restore a tested backup if available, and repeat the recreation test.

The public Localtonet URL does not open

Verify the local URL first. Then confirm that the selected Localtonet client is connected, the tunnel has been started, and its target IP address and port match the Docker mapping. Creating a tunnel alone does not make it active.

The public page opens, but Orb does not synchronize

Enter the public URL exactly, including its HTTPS scheme and any required path. Watch the backend logs during the client attempt. A root-page response does not prove that application APIs or long-lived streams are functioning.

A provider or harness fails after projects load correctly

Treat this as a later integration failure. Verify the selected execution placement, harness installation, provider account, model access, workspace, and remote-node registration. Do not rebuild the backend or change the tunnel solely because one provider fails while server-backed projects remain available.

Frequently asked questions

Are Orb and sandboxed.sh separate applications?

They are separate parts of the same system. Orb is the macOS and iOS client experience. The project formerly named sandboxed.sh provides the backend that owns projects, missions, event history, and remote-node coordination.

Why does this guide pin v0.12.0?

Pinning v0.12.0 at commit 33c0345 makes the source and deployment files reproducible. The development branch changes over time, so an operator should review newer release notes and installation files before upgrading.

What Docker port should I enter in Localtonet?

Use the published host port shown by docker compose ps for the verified Orb client-facing service. Do not use a container-only port or copy a number from another release. Test the resulting local URL and Orb sign-in before creating the tunnel.

Is SANDBOXED_OAUTH_OWNER required for the basic server?

No universal requirement is established for basic deployment. The current documentation describes SANDBOXED_OAUTH_OWNER=cli-proxy for a CLIProxyAPI provider workflow in which the proxy owns supported OAuth token refresh. Configure it only when using that integration.

Should I use a Localtonet HTTP tunnel?

Use an HTTP tunnel when the verified local client endpoint accepts ordinary HTTP. If the deployment's local entry point uses HTTPS or another TLS transport, confirm its TLS behavior and choose a compatible tunnel family rather than assuming HTTP.

Does Localtonet require router port forwarding?

No. Our client establishes an outbound connection to a Localtonet relay server. The resulting tunnel provides a public URL without inbound router port forwarding, a public IP address, VPN setup, or an inbound firewall change.

Can the Localtonet client run on another machine?

Yes, if that machine can reach the verified Orb host address and port. If Docker publishes the service only on the host's loopback interface, run our client on that host or change the application networking only through a reviewed, secure configuration.

Does Docker make untrusted agent code safe?

No. Containers and resource caps are useful controls, but a Docker daemon mount, broad host-directory access, credentials, permissive networking, or a kernel-level escape can cross the intended boundary. Use dedicated infrastructure and a stronger isolation design for unknown or hostile workloads.

How do I stop remote Orb access without stopping the backend?

Stop or delete the Localtonet tunnel. The local Docker deployment can continue running while its public Localtonet endpoint is unavailable. The tunnel is active only while the selected Localtonet client is connected and the tunnel is running.

Connect your verified Orb backend with Localtonet

After the pinned Docker deployment passes local sign-in, project, mission, and persistence tests, use Localtonet to provide authorized Orb clients with a public HTTPS address without opening an inbound router port.

Get Started Free โ†’

Corrections & updates

Substantive changes approved by the Localtonet editorial team are listed transparently below.

Replace the evidence-limitation placeholders with a tested, version-identified Docker deployment procedure from Orb's current Docker Install and Server Setup documentation. Add concrete prerequisites, repository checkout, environment configuration, Compose startup, endpoint discovery, status and log inspection, local HTTP or application verification, Orb sign-in and first-project validation, persistence testing, shutdown, restart, backup, restore, and upgrade instructions. Clearly distinguish mandatory settings from optional provider

Localtonet is a secure multi-protocol tunneling and proxy platform designed to expose localhost, devices, private services, and AI agents to the public internet supporting HTTP/HTTPS tunnels, TCP/UDP forwarding, mobile proxy infrastructure, file server publishing, latency-optimized game connectivity, and developer-ready AI agent endpoint exposure from a single unified control plane.

support