32 min read

Install Pilot from Source and Expose It with Localtonet

Build and verify Pilot from source, then expose its local HTTP gateway with Localtonet without inbound router port forwarding.

POSIX Source Build ยท Pilot v2.281.0 ยท Localtonet ยท 2026

Build a pinned Pilot revision, validate its GitHub workflow locally, and publish a documented HTTP endpoint only when your version provides one

Pilot is a self-hosted development automation system that can pick up tickets, work against a codebase, run quality gates, and prepare pull requests for review. This tutorial demonstrates the repository's Make-based source installation on a compatible POSIX environment and pins the build to Pilot release v2.281.0, commit 56f6983, instead of silently compiling a moving default branch. Pilot's current README and documentation site disagree about whether initial configuration begins with pilot init or pilot setup, so the guide shows how to use the instructions belonging to the checked-out revision rather than mixing documentation generations. It also explains how to connect a documented Pilot HTTP endpoint to Localtonet without assuming an unverified gateway address, port, route, authentication scheme, or integration purpose.

๐Ÿ”’ Pin and record the source revision before building ๐ŸŒ Expose only a version-documented HTTP endpoint โšก Verify Pilot locally before starting a tunnel
Pilot running on a local workstation while a Localtonet client connects a documented HTTP service to a remote browser
A Localtonet HTTP tunnel can carry requests to a local Pilot endpoint, but only after that endpoint and its security model have been verified for the installed Pilot revision.

Understand the workflow and its evidence boundary

Pilot works from tickets rather than a continuing sequence of interactive prompts. Its documented workflow can collect an issue from a supported work system, analyze the target codebase, create a branch, implement a change, run configured quality gates, and open a pull request. A person can then review the result before it is merged. GitHub polling is the concrete workflow used in this tutorial.

Source installation, Pilot configuration, provider authorization, application verification, and public exposure are separate stages. A successful Go build does not prove that Pilot can access a repository. A successful GitHub connection does not prove that Pilot is serving an HTTP endpoint. A listening HTTP server does not prove that a particular route is intended for public use. Localtonet should be introduced only after the preceding layer is understood and working.

The current Pilot sources do not present one consistent quick-start command. The repository README shows pilot init, while the current documentation landing page shows pilot setup. The documentation site also advertises networking and tunnel material, but the supplied primary evidence does not establish the gateway's bind address, port, enablement flags, public route, accepted methods, request authentication, or intended integration.

For that reason, this revision does not repeat the previous claims that Pilot automatically listens on 127.0.0.1:9090 or that a --no-gateway option controls the listener. It also does not claim that requesting / is a meaningful health test. Those details must come from documentation or configuration associated with the exact Pilot revision being operated.

What โ€œexpose Pilotโ€ means in this tutorial

It means creating a Localtonet HTTP tunnel to a Pilot HTTP endpoint whose local address, port, route, method, authentication behavior, and integration purpose you have independently established for the pinned Pilot revision. If your Pilot workflow uses polling and does not require an inbound HTTP route, there may be nothing useful to expose. In that case, complete the local installation and skip the tunnel.

๐Ÿ“Œ Revision-pinned build The tutorial checks out release v2.281.0 and records the resolved commit before compilation.
๐Ÿ› ๏ธ POSIX source workflow The demonstrated installation uses Git, Make, a POSIX shell, and the repository's elevated global installation target.
๐Ÿค– GitHub ticket workflow Pilot can poll for GitHub issues carrying the documented pilot label and prepare code changes for review.
๐ŸŒ Conditional HTTP exposure Localtonet can publish a verified local HTTP target without inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

Why this tutorial pins a release

Running git clone and immediately building the default branch produces whatever development revision happens to be current at that moment. That may be appropriate for contributors who deliberately want the latest source, but it is not a reproducible deployment procedure. Commands, configuration formats, flags, and endpoint behavior can change between commits.

This guide uses the published v2.281.0 release tag. The release page identifies commit 56f6983. Recording both the tag and resolved commit provides a concrete baseline for troubleshooting and review. It does not imply that Localtonet has audited Pilot's code or that the release is suitable for every production environment. You remain responsible for reviewing the release, its license, configuration, and operational behavior.

The demonstrated build is not a verified Windows source workflow

Pilot's repository contains Windows installation material and publishes a Windows x64 desktop package, but the source procedure documented here uses make, a POSIX shell, and sudo make install-global. Use it on a compatible Linux, macOS, or comparable POSIX environment. Do not translate the commands into PowerShell or Windows filesystem operations unless Pilot's documentation for the selected revision explicitly supplies that workflow.

Prepare the source-build prerequisites

Pilot's repository README lists Go 1.22 or newer for source compilation and Claude Code CLI 2.1.17 or newer for its development workflow. An OpenAI API key is described as optional for voice transcription, not as a general prerequisite for compiling the Go source. The Make-based installation also needs Git, Make, a compatible shell, and permission to perform the global installation step.

Requirement Purpose Initial check
Go 1.22 or newer Compiles Pilot from source go version
Claude Code CLI 2.1.17 or newer Provides a documented Pilot execution backend claude --version
Git Clones the repository and selects the release revision git --version
Make Runs the repository's build and installation targets make --version
POSIX shell environment Runs the demonstrated commands and secure interactive token prompt Confirm that the shell supports the commands below
Approved elevation Allows the documented global installation target to run with sudo Confirm local administrative policy before installing
GitHub credential Allows Pilot to perform the selected repository workflow Create or obtain it according to GitHub and Pilot guidance
Localtonet client Creates the outbound connection after a suitable local HTTP endpoint is verified Required only for the optional exposure stage

Check the locally installed tools before downloading the source:

go version
git --version
make --version
claude --version

Confirm that the displayed versions satisfy Pilot's stated requirements. Install or upgrade missing dependencies through the official distribution process approved for your operating system. This article does not invent universal package-manager commands because package names, repositories, and supported installation paths differ among POSIX environments.

Claude Code authentication is separate from GitHub authorization. Make sure the Claude Code CLI works under the same operating-system account that will run Pilot. A command that works for one user may not have the same configuration, credentials, filesystem permissions, or executable path when Pilot is launched by another user or a service manager.

Use a controlled test environment first

Pilot can read source code, create branches, execute development tools, run tests, and prepare pull requests. Start with a test repository and a bounded issue. Do not make a production repository, deployment credential, database, or privileged infrastructure project the first validation target.

Pin and record Pilot v2.281.0 before building

Clone the official repository, fetch the selected release tag, and check it out in detached HEAD state. A detached checkout is useful here because it makes the build's release baseline explicit instead of placing you on a local branch that can advance accidentally.

1

Clone the official Pilot repository

Run the clone from the parent directory where the source tree should be stored.

git clone https://github.com/qf-studio/pilot
cd pilot
2

Fetch and select release v2.281.0

Fetch the named tag and check it out directly. Do this before compiling so the build does not use the moving default branch.

git fetch --tags origin
git checkout --detach v2.281.0
3

Verify the resolved revision

Display the exact commit and confirm that the checkout resolves to the release commit identified by the release page.

git rev-parse HEAD
git describe --tags --always

For this tutorial baseline, git rev-parse HEAD should report a commit beginning with 56f6983, and the description should identify v2.281.0. Stop if the checkout resolves somewhere else.

4

Check for local modifications

A clean result makes it easier to distinguish the published revision from local changes.

git status --short

No output indicates that no tracked working-tree changes are present.

5

Record the revision with the deployment notes

Save the resolved commit and tag description outside any public repository or secret-bearing configuration. The following file contains revision metadata only.

{
  git rev-parse HEAD
  git describe --tags --always
} > pilot-build-revision.txt

Keep pilot-build-revision.txt with your deployment or change record. It provides a reproducible answer to the question โ€œWhich source did this binary come from?โ€ It does not record the Go compiler version, build host, or dependency cache, so record those separately if your organization requires fuller build provenance.

If you intentionally build the default branch

Treat the result as an unpinned development build unless you first record its exact commit. Run git rev-parse HEAD immediately before compilation and retain that value. Do not identify such a binary only as โ€œlatest,โ€ because the meaning of latest changes over time.

Build and install the pinned Pilot source

Sequence from selecting Pilot source through compilation, installation, configuration, and workflow startup
The source workflow should preserve a clear boundary between revision selection, compilation, installation, configuration, and runtime verification.

Pilot's repository README documents two Make targets for source installation: make build followed by sudo make install-global. Run them in that order. Compilation should succeed before elevated installation is attempted.

1

Compile the selected source

From the root of the checked-out Pilot repository, run the documented build target.

make build
2

Review the build result

Read the complete output and resolve any Go version, dependency, compiler, test, or filesystem error. Do not continue merely because an older Pilot binary already exists elsewhere on the machine.

3

Install the built command globally

Use the repository's documented global installation target only after the build succeeds. The command requests elevation and may prompt for the local account password.

sudo make install-global
4

Confirm which executable the shell resolves

Ask the shell to locate Pilot. This helps detect a missing installation or an older copy installed through another channel.

command -v pilot

If command -v pilot returns no path, inspect the installation output and your shell's PATH. If it returns a path, record it with the revision notes. Machines that have used Homebrew, go install, a desktop package, and a source installation may contain multiple copies. Updating one copy does not update the others.

Other documented installation channels

Pilot's README also lists Homebrew, go install, and desktop release packages. Those are valid alternatives for their documented platforms, but they do not reproduce the checked-out source-build procedure above. Choose an installation channel deliberately and verify which binary runs.

Method Documented form Revision implications
Homebrew brew tap qf-studio/pilot, then brew install pilot The package channel selects the available package version
Go install go install github.com/qf-studio/pilot/cmd/pilot@latest @latest does not express the pinned tag used in this tutorial
Source build make build, then sudo make install-global Builds the source currently checked out in the repository
Desktop package Published macOS, Windows x64, and Linux x64 release assets Uses the revision represented by the selected package

Reconcile Pilot setup commands and load credentials safely

Do not run both pilot init and pilot setup merely because both appear in current Pilot material. The repository README currently presents pilot init, while the current documentation landing page presents pilot setup. This is a documentation-generation difference that must be resolved against the version you actually installed.

Use the quick start from the pinned checkout

The repository content checked out at v2.281.0 belongs to the selected source baseline. Review its README and configuration documentation before initialization:

git show HEAD:README.md | sed -n '/Quick Start/,/How It Works/p'

Use the initialization command shown by that revision, not a command copied from a newer landing page. If the extracted section shows pilot init, use pilot init. If version-specific documentation instead directs you to pilot setup, use pilot setup. If the installed command and checked-out documentation disagree, stop and verify that command -v pilot points to the binary you just installed.

Do not mix configuration generations

Setup commands may create or modify configuration. Running commands from different documentation generations can produce confusing state even when both commands happen to exist. Back up any existing Pilot configuration, use the instructions associated with the installed revision, and answer prompts according to the repositories and integrations you intend to operate.

Load the GitHub token without typing it into a shell command

Pilot's current quick-start material establishes that the GitHub integration reads GITHUB_TOKEN, but its displayed export GITHUB_TOKEN="your-token" example encourages users to place the secret directly on a command line. Depending on the shell and how the command is entered, that can leave the token in history, terminal capture, copied snippets, or screenshots.

In an interactive Bash-compatible shell, prompt for the token without echoing it and then export the resulting variable:

IFS= read -r -s -p "GitHub token: " GITHUB_TOKEN
printf '\n'
export GITHUB_TOKEN

This keeps the token value out of the literal command text and prevents it from being displayed while entered. It does not turn an environment variable into a general-purpose secret vault. The value remains in the Pilot process environment and may be visible to sufficiently privileged local processes or diagnostic systems. Do not enable shell tracing, print the variable, save it in the repository, or include it in support output.

For a persistent service, use the secret-loading facility approved for your service manager or deployment platform rather than placing the token in a world-readable startup script. The supplied Pilot evidence does not specify one universal secret-manager integration, so this guide does not invent a Pilot-specific credential store.

Apply evidence-based least privilege

The token must be able to perform the actions required by the selected Pilot GitHub workflow in the intended repositories. That can include reading issues and source, changing issue labels, creating branches, pushing code, and opening pull requests, depending on the workflow and repository policy. The supplied primary evidence does not define an exact GitHub fine-grained permission matrix, so naming specific permission switches would be guesswork.

Use a dedicated credential where practical, restrict repository access to the repositories Pilot must operate on, avoid organization-wide or administrative access, and follow the permission guidance shipped with the pinned Pilot revision. If Pilot reports a denied GitHub operation, identify the specific failed action before broadening permissions. Do not respond by granting every available scope.

Start the documented GitHub workflow

After completing the version-appropriate initialization and loading the token, the current repository README documents GitHub polling with:

pilot start --github

Keep this process in the foreground during initial validation so that startup and authorization errors remain visible. The documentation also shows environment modes:

pilot start --env=dev --github
pilot start --env=stage --github
pilot start --env=prod --github

The documented behavior distinguishes fast development operation, stage operation that waits for CI before automatic merge, and production operation that waits for CI and human approval. Review the version-specific behavior before selecting a mode. Start with a low-risk repository and preserve human review for changes involving authentication, secrets, deployment, databases, or infrastructure.

Verify Pilot locally before considering a tunnel

Local verification should test the workflow Pilot is actually intended to perform. For GitHub polling, that means verifying the process, provider authorization, issue selection, repository access, execution backend, quality gates, and pull request result. An arbitrary HTTP request is not a substitute for those checks.

1

Observe startup

Keep the terminal containing pilot start --github visible. Resolve configuration errors, missing credentials, provider authorization failures, unavailable executables, or immediate process exits before proceeding.

2

Create a bounded test issue

In a test repository that Pilot is authorized to access, create a small and reversible issue. Add the documented pilot label. Avoid destructive operations and production deployment work.

3

Confirm issue pickup

Verify that Pilot detects the intended issue and does not claim unrelated work. Review any label or status changes produced by the pinned version.

4

Observe repository and quality-gate behavior

Confirm that Pilot can access the code, create its working branch, invoke the configured execution backend, and run the project's expected test, lint, or build checks.

5

Review the resulting pull request

Inspect the diff, test evidence, branch target, issue link, and any automated merge behavior. Treat Pilot's output as code requiring normal review.

A successful bounded task proves more than a generic port check. It establishes that the installed binary, configuration, execution backend, GitHub credential, repository permissions, and project commands can work together for the selected use case.

If GitHub polling is the only feature you need, it may not require inbound requests at all. Polling means Pilot initiates outbound requests to GitHub. A public tunnel is useful only when a separate, documented Pilot integration requires another system to initiate HTTP requests toward your Pilot instance.

Establish the Pilot HTTP endpoint before exposing it

The supplied current Pilot evidence does not substantiate a universal default listener at 127.0.0.1:9090. It also does not establish a gateway-disable flag, a health route, a webhook route, a browser dashboard route, or an inbound authentication mechanism. Therefore, this tutorial cannot provide a truthful fixed Pilot host, port, or URL path.

Before creating an HTTP tunnel, locate the networking or integration instructions shipped with the pinned release and answer all of the following questions:

  • Which Pilot feature requires an inbound HTTP request?
  • What exact local IP address or hostname does its server bind to?
  • What exact TCP port does it use?
  • What URL path and HTTP method does the integration require?
  • What response indicates that the route is functioning?
  • How does Pilot authenticate or validate the inbound request?
  • Does the external provider require a secret, signature, challenge, or callback verification?
  • Does the route trigger code execution, issue creation, repository changes, or another privileged action?

If the version-specific documentation does not answer those questions, do not publish the endpoint. A process listening on a TCP port is not enough evidence that it is intended for internet exposure.

Required fact Why it matters Unsafe assumption to avoid
Bind address and port Defines the local target Localtonet must reach Assuming every Pilot release uses 127.0.0.1:9090
Documented route and method Identifies the actual integration endpoint Guessing /, /health, /api, or /webhook
Authentication or validation Controls whether an internet-originated request is accepted Assuming GitHub credentials protect inbound HTTP traffic
Integration purpose Determines whether public reachability is useful at all Exposing a listener when polling already satisfies the workflow
Expected response Allows meaningful local and public verification Treating any HTTP status as proof that the integration works

Perform a version-specific local test

Once the pinned Pilot documentation gives you a real endpoint, start Pilot and test that exact route locally using its required method and authentication. Do not substitute a request to the root path unless the documentation explicitly defines it.

A generic request template looks like this:

curl -i http://LOCAL_IP:LOCAL_PORT/DOCUMENTED_PATH

Replace every placeholder with values established by the pinned version. If the route requires headers, signatures, a challenge, or a non-GET method, follow the documented integration procedure rather than extending this generic command with guessed values.

No verified endpoint means no tunnel target

Do not point Localtonet to the former 127.0.0.1:9090 example unless your installed Pilot revision independently documents or displays that exact listener. The Localtonet configuration must reflect the service that actually exists, not a value retained from an older article.

Expose a verified Pilot HTTP endpoint with Localtonet

HTTP requests travel from a public Localtonet address through an outbound tunnel to a verified local Pilot HTTP endpoint
Localtonet provides the public transport path, while Pilot's version-specific documentation must define the local endpoint and application behavior.

Continue only if you have established a legitimate inbound HTTP use case and verified its endpoint locally. Our Localtonet client should run on the device that can reach that endpoint. The client creates an outbound connection to our relay, so the workflow does not require inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

If Pilot binds only to a loopback address, run our client on the same machine. Loopback always refers to the machine on which a connection originates. A Localtonet client on another computer cannot reach the Pilot host by targeting its own 127.0.0.1.

1

Install and run the Localtonet client

Install our client for the operating system on the device that can reach the verified Pilot HTTP endpoint, then launch it. Keep Pilot running during tunnel setup and testing.

2

Select the correct device

Authenticate or select the device by using its device-specific Localtonet token. Treat this token as a secret and never place it in source control, screenshots, issues, or public logs.

3

Select an available relay server

Choose a server or region currently available in your Localtonet dashboard. Do not copy a hardcoded server code from an article because availability can vary.

4

Create the HTTP tunnel

Enter the verified Pilot listener as the local IP address and port. HTTP process types can use a random subdomain, a custom subdomain where supported, or a custom domain. Check the current Localtonet documentation before applying custom-domain DNS settings.

5

Start the tunnel

Review the local target and use the Start button. Creating or saving the tunnel does not mean it is running. Pilot, the Localtonet client, and the selected tunnel must all remain active.

6

Test the documented public route

Use the assigned public HTTPS address with the exact Pilot path, method, and authentication required by the integration. Compare its behavior with the local test before registering the URL with an external provider.

See the Localtonet HTTP tunnel documentation for the current dashboard workflow. The correct local target is not a universal Pilot value. It is the address and port verified for your selected Pilot revision and configuration.

Understand the tunnel lifecycle

A tunnel is available only while the selected client device is connected and the tunnel is running. A created tunnel must still be started. It can later be stopped or deleted when remote access is no longer needed.

Secure the public exposure boundary

A narrow public route reaches one verified Pilot endpoint while unrelated local services remain private
Publish only the endpoint needed by the documented integration and keep unrelated local services outside the tunnel.

Localtonet supplies connectivity to the configured local target. It does not replace Pilot's application authentication, request validation, authorization rules, or safe automation policy. A route that is unsafe for anonymous internet access does not become safe merely because it is reached through an outbound tunnel.

๐ŸŽฏ Expose one intentional target Configure the tunnel for the verified Pilot HTTP listener, not a broad network range or unrelated development service.
๐Ÿ” Require documented validation Use the authentication, shared secret, signature, challenge, or provider verification documented for the exact Pilot integration.
๐Ÿงช Start with bounded work Test against a low-risk repository and reversible issue before permitting remotely initiated production changes.
๐Ÿ›‘ Stop unused exposure Stop or delete the Localtonet tunnel when the remote integration is no longer needed.
Do not publish an endpoint with unknown authentication behavior

If the pinned Pilot documentation does not state how inbound requests are authenticated or validated, keep the endpoint local. GitHub credentials used by Pilot for outbound API access are not evidence that inbound HTTP requests are protected.

Protect every credential independently. This includes the GitHub token, Claude or other execution-backend credentials, messaging integration secrets, webhook secrets, and the Localtonet device token. Do not include them in repositories, issue bodies, pull requests, screenshots, shell tracing, or diagnostic bundles.

Review the effect of the exposed route. An endpoint that creates an issue is different from one that starts code execution, changes a repository, approves work, or triggers deployment. Apply the least privilege and human review appropriate to the most sensitive action the route can initiate.

Operate and update the combined setup

A working deployment has at least three independent lifecycle components: the Pilot process, the Localtonet client, and the HTTP tunnel. An external integration may add a fourth component. Diagnose them separately rather than treating every failure as a tunnel problem.

Component Required state Typical effect when unavailable
Pilot Running with the intended configuration and integration The local application workflow or endpoint is unavailable
Execution backend Installed, authenticated, and usable by Pilot's operating-system account Tickets may be visible but development execution fails
Localtonet client Connected on a device that can reach Pilot Our relay cannot forward requests to the local target
HTTP tunnel Created with the correct target and explicitly started The assigned public endpoint is not active
External integration Configured with the correct public route and credentials Transport may work while application requests still fail

Starting a routine session

  1. Confirm that the intended Pilot binary and revision are installed.
  2. Load credentials through the approved secret-handling process.
  3. Start Pilot with the reviewed integration and autonomy settings.
  4. Verify a bounded local workflow or the documented local HTTP route.
  5. Start the Localtonet client and confirm the intended device is connected.
  6. Start the HTTP tunnel only if remote access is required.
  7. Test the exact public integration route.

Stopping remote access

Stop the Localtonet tunnel when the remote workflow ends. If the configuration will not be reused, delete it. Stopping Pilot removes the local application, but explicitly stopping the tunnel makes the intended exposure state clear and avoids leaving an active public endpoint directed at an unavailable target.

Updating Pilot without losing provenance

Pilot documents an upgrade capability, but an in-place upgrade and a revision-pinned source deployment are different operational policies. If your policy requires reviewed source, select the new tag or commit explicitly, record it, build it, and repeat the verification sequence. Do not run an unreviewed update and continue labeling the installation as v2.281.0.

After an update, recheck the initialization model, configuration format, GitHub integration, autonomy settings, networking behavior, routes, and authentication. Never assume that a tunnel target or public route remains valid merely because the previous binary used it.

Troubleshoot build, configuration, and tunnel failures

The checkout does not resolve to the expected commit

Run:

git fetch --tags origin
git checkout --detach v2.281.0
git rev-parse HEAD
git describe --tags --always

Confirm that the commit begins with 56f6983. If it does not, stop before building and inspect the repository remote, tag resolution, and command output. Do not force the result to match by editing the revision record.

The source build fails

Confirm that you are in the repository root and that the selected revision is clean. Run go version and verify Go 1.22 or newer. Preserve the first meaningful compiler or dependency error because the final Make failure is often only a summary.

Avoid mixing local source edits into a release build. If git status --short reports changes, review them and either commit them as an intentionally different build or restore a clean checkout according to your source-control policy.

The global installation is denied

The documented target uses sudo make install-global. Use only approved elevation for the machine. Do not work around the failure by recursively changing broad system-directory permissions. Ask the machine administrator to install the binary or select another documented installation channel.

The shell finds the wrong Pilot binary

Run:

command -v pilot

Compare the path with the installation output. If multiple installation channels have been used, remove ambiguity before diagnosing version-dependent behavior. Restarting the shell may be necessary after a legitimate PATH change, but it will not correct an installation that wrote the binary somewhere else.

pilot init and pilot setup disagree

Return to the README and configuration material in the checked-out v2.281.0 source. Use the command associated with that revision. If the installed binary appears to follow newer documentation, verify the executable path and rebuild or reinstall the selected source. Do not run both setup paths as an experiment against important existing configuration.

Pilot cannot use GitHub

Confirm that GITHUB_TOKEN was exported in the environment that launches Pilot. A token loaded in one terminal is not automatically available to another terminal, service account, container, or process manager. Confirm that the token is valid, limited to the intended repositories, and permitted to perform the specific operation that failed.

Also check that Pilot started with --github and that the test issue has the documented pilot label. Provider polling problems are independent of Localtonet and should be resolved before any tunnel is configured.

Pilot sees the issue but cannot complete work

Check Claude Code CLI availability and authentication under the Pilot account. Review repository filesystem permissions, branch protection, project dependencies, and quality-gate commands. A provider credential can allow Pilot to read an issue while a separate local or repository restriction prevents implementation or pull request creation.

No Pilot HTTP listener can be identified

Do not assume one exists. GitHub polling is an outbound workflow and does not by itself require an inbound endpoint. Review the networking, tunnel, and integration documentation associated with the pinned release. If it does not define an address, port, route, and purpose, skip Localtonet exposure.

The local endpoint works but the public URL does not

Check each Localtonet lifecycle requirement:

  • The Localtonet client is running and connected.
  • The selected device token belongs to the device that can reach Pilot.
  • The HTTP tunnel uses the verified local IP address and port.
  • The tunnel has been started rather than only created.
  • A loopback target is used only when our client runs on the same machine.
  • Pilot remains active while the public test is performed.

The public address responds but the integration fails

Separate transport from application behavior. A response from the public host shows that an HTTP server was reached. It does not prove that the path, method, content type, payload, signature, challenge, or credentials satisfy the Pilot integration.

Compare the public request with the successful version-specific local test. Do not append guessed paths such as /webhook, /api, or /health. Use only the route and validation procedure documented for the installed release.

The endpoint works intermittently

Determine which component changed state. Pilot may have exited, the host may have slept, the Localtonet client may have disconnected, or the tunnel may have stopped. The endpoint requires Pilot to remain available at the configured local target while the selected Localtonet device is connected and the tunnel is running.

Frequently asked questions

Which Pilot revision does this tutorial build?

It pins the source checkout to release v2.281.0, identified by the release page as commit 56f6983. Verify the full resolved commit with git rev-parse HEAD before building.

Can I build the current default branch instead?

Yes, if you deliberately want a development build. Record git rev-parse HEAD immediately before compilation and expect commands or behavior to differ from this pinned release. Do not describe an unrecorded default-branch build as reproducible.

Should I run pilot init or pilot setup?

Use the command documented by the source revision you installed. The current repository README shows pilot init, while the current documentation landing page shows pilot setup. Do not mix the two documentation generations or run both without version-specific guidance.

Does this source-build workflow support Windows?

The demonstrated workflow is for compatible POSIX environments because it uses Make, a POSIX shell, and sudo make install-global. Pilot publishes a Windows x64 desktop package and its repository contains Windows installation material, but this article does not claim an equivalent Windows source-build procedure.

What version of Go is required?

Pilot's repository README lists Go 1.22 or newer for source builds. Check the installed toolchain with go version before running make build.

How should I enter the GitHub token?

Avoid placing the real token in a literal export command. In an interactive Bash-compatible shell, read it silently into GITHUB_TOKEN and export the variable. For persistent services, use the approved secret-loading feature of the service manager or deployment platform.

Which GitHub token permissions does Pilot require?

The supplied primary evidence does not provide a complete fine-grained permission matrix. Follow the GitHub integration guidance for the pinned Pilot revision, restrict access to the intended repositories, and grant only the operations required by the selected workflow. Diagnose a specific denied action before adding permissions.

Does Pilot always listen on 127.0.0.1:9090?

That universal default is not established by the current primary evidence supplied for this tutorial. Determine the bind address and port from the configuration or networking documentation associated with your exact Pilot revision. Do not configure Localtonet with 127.0.0.1:9090 unless your installation verifies it.

Which Pilot route should I expose?

Expose only the route documented for the specific integration you are configuring. The current supplied evidence does not establish a generic health, webhook, API, or dashboard route. If no route and authentication mechanism are documented, keep Pilot local.

Do I need a tunnel for GitHub polling?

Not merely because polling is enabled. Polling is initiated by Pilot toward GitHub. Create a public tunnel only when a separately documented integration requires inbound HTTP access to a verified Pilot route.

Does Localtonet require router port forwarding?

No. Our client establishes an outbound connection to a Localtonet relay server. This workflow does not require inbound router port forwarding, firewall changes, VPN setup, or a public IP address.

Is the public URL active as soon as the tunnel is created?

No. Creating a tunnel does not start it. The selected Localtonet client device must be connected, the tunnel must be started, and Pilot must remain available at the configured local target.

Does Localtonet authenticate Pilot requests?

A Localtonet HTTP tunnel provides connectivity to the configured service. Do not treat that as a substitute for Pilot's application-level authentication or request validation. Confirm and test the controls documented for the route before publishing it.

Connect a verified Pilot endpoint with Localtonet

Pin and build Pilot, complete the configuration flow belonging to that revision, and validate a bounded GitHub workflow first. If your Pilot version documents a real inbound HTTP integration, verify its local address, port, route, method, and authentication before creating the Localtonet HTTP tunnel.

Get Started Free โ†’

Corrections & updates

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

Remove the outer article wrapper and place the hero first, followed immediately by the existing clickable guide card. Re-audit the tutorial against the current Pilot installation, configuration, networking, tunnel, GitHub integration, and troubleshooting documentation. Pin the instructions to a tested Pilot release or commit and show how to select and record that revision before building. Reconcile pilot init with the newer pilot setup workflow instead of mixing documentation generations. Verify the gateway bind address, port, enablem

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