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.
๐ What's in this guide
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.
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.
v2.281.0 and records the resolved commit before compilation.
pilot label and prepare code changes for review.
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.
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.
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.
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
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
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.
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.
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.
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
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.
Compile the selected source
From the root of the checked-out Pilot repository, run the documented build target.
make build
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.
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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.
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.
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.
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.
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.
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.
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
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.
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
- Confirm that the intended Pilot binary and revision are installed.
- Load credentials through the approved secret-handling process.
- Start Pilot with the reviewed integration and autonomy settings.
- Verify a bounded local workflow or the documented local HTTP route.
- Start the Localtonet client and confirm the intended device is connected.
- Start the HTTP tunnel only if remote access is required.
- 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 โ