Skip to main content

Overview

The on-prem collector is a lightweight agent that runs within your network. It clones repositories, analyzes commits using an LLM, and streams only structured metadata (knowledge graphs, summaries, metrics) back to the Navigara cloud. Source code never leaves your infrastructure. The collector connects to the Navigara API over a persistent gRPC stream. It receives work assignments (which repos/commits to analyze), processes them locally, and sends back structured results. If the connection drops, it automatically reconnects with exponential backoff and replays any buffered results.

Prerequisites

  • Docker Engine 24+ and Docker Compose v2+ on a Linux host (Ubuntu 24.04 LTS or Debian 13+ recommended)
  • Network access to your Git repositories (GitHub, GitLab, Bitbucket, or self-hosted)
  • Outbound HTTPS to the Navigara API (app.navigara.com:443)
  • LLM API endpoint: see LLM Configuration below

Hardware Requirements

Disk holds temporary Git clones. The collector caches cloned repositories to speed up later analyses.

Git Provider Authentication

The collector supports multiple authentication methods depending on your Git provider and security requirements. All credentials are configured in the Navigara dashboard and forwarded to the collector on demand over the encrypted gRPC stream; no static Git tokens are stored on the collector host. Install the Navigara GitHub App on your GitHub organization. How it works:
  1. Install the Navigara GitHub App on your GitHub organization (or specific repositories)
  2. Add the repositories in the Navigara dashboard
  3. The backend generates scoped installation tokens on demand and sends them to the collector
  4. Tokens are short-lived and automatically rotated
Advantages:
  • No static tokens to manage or rotate
  • Fine-grained repository access (select specific repos during app installation)
  • Works with both GitHub.com and GitHub Enterprise

Option 2: Provider Tokens, End-to-End Encrypted (All Providers)

For any provider the GitHub App does not cover, use a personal access token, encrypted end to end so that Navigara can never read it. You generate a keypair on the collector host, encrypt the token locally, and paste the blob into the dashboard. Navigara stores and forwards that blob verbatim. There is no server-side key and no server-side decryption. The collector holds the private key and decrypts each token in memory, only when it authenticates to the Git host. The plaintext token and the private key never leave your network.
This applies to the on-prem collector only. In a full on-premises deployment the whole platform runs inside your network, so paste the token directly and skip the encryption steps.
Do these steps after Installation. They use the digest-pinned COLLECTOR_IMAGE from the .env you create there. Load it into your shell first:
1

Create a personal access token

Create a fine-grained personal access token with:
  • Repository access: Select the repositories you want to analyze
  • Permissions: Contents (read), Pull requests (read), Metadata (read)
2

Generate a keypair on the collector host

Writes private.pem (mode 0600) and public.pem to /opt/navigara/keys, and prints the key fingerprint. Keep private.pem on this host; it is never shared.
3

Give the collector the private key

Mount the key and set COLLECTOR_PRIVATE_KEY_PATH in your docker-compose.yml, then restart:
4

Encrypt the token

Copy the navigara-enc-v1:… blob it prints.
5

Paste the blob into the dashboard

Add the blob as the provider token under Settings → Connections → Source control when connecting your Git account. Navigara stores it as-is and your next analysis run uses it automatically.
To move an existing connection to encryption: mint a fresh token at your Git host, encrypt it, paste the blob, then revoke the old token.
The collector can load several private keys at once. Comma-separate the paths in COLLECTOR_PRIVATE_KEY_PATH, or use COLLECTOR_PRIVATE_KEY_PEM for inline PEM. It selects the matching key per blob by fingerprint, so you can add a new key before you re-encrypt old tokens. If a blob does not decrypt, the collector drops it and fails the task. It never forwards an undecrypted blob to the Git host.
For the full collector CLI reference (keygen, encrypt-token, decrypt-token) and key rotation, see Encrypted Git Tokens.

Installation

1. Prepare the host

Install Docker from Docker’s own package repository. Replace ubuntu with debian on a Debian host. Log out and back in for the group change to take effect.
Do not use the get.docker.com convenience script. Docker does not support it for production installs.

2. Verify the release

Verify the image before you run it. Navigara signs every released image and publishes an SBOM and build provenance alongside it. Install cosign, then verify the digest you intend to run. Your account representative provides the digest for your release, and it is also listed in step 4.
The image also carries its provenance and a full SPDX package list. Feed them to your own scanner:
If cosign verify reports no matching signatures, stop. Either the version you pinned predates image signing (install the current release instead), or the image is not the one Navigara published. Contact support before running it.

3. Generate a Collector API Token

In the Navigara dashboard, go to Settings → API Tokens and create a new API token. This token authenticates the collector with the Navigara backend. Copy it, since you need it in the next step.

4. Configure the deployment

Create the deployment directory:
Create docker-compose.yml. Keep the containment settings as written. The collector publishes no port. It dials out to Navigara, and nothing reaches it from outside.
The collector-workdir volume holds full Git clones. Encrypt it if your policy requires encryption of source code at rest. Create a .env file:
Pin COLLECTOR_IMAGE by digest. LLM_API_URL is required for anthropic and openai. Set GOOGLE_APPLICATION_CREDENTIALS only when the host has no gcloud authentication.

LLM Configuration

Navigara requires an LLM API endpoint for AI-powered commit analysis. Supported providers: Analysis uses two models. The knowledge agent classifies every commit and is most of the token spend, so it runs on a small fast model from LLM_MODEL_AGENT_KG. Summaries and the rest of the pipeline are low volume and run on the stronger model in LLM_MODEL. Leave LLM_MODEL_AGENT_KG unset and the knowledge agent falls back to LLM_MODEL.

5. Start the collector

Verify the collector is running and connected:
You should see output indicating a successful connection:

6. Add repositories

In the Navigara dashboard:
  1. Go to Settings → Repositories → Add Repository
  2. Select your Git provider and authenticate (if using cloud-managed tokens or GitHub App)
  3. Select the repositories to analyze
  4. The collector begins processing automatically

Configuration Reference

Self-hosted providers on a private network

The collector refuses provider API calls that resolve to a private address. This blocks server-side request forgery. Git clone is not affected, so commits keep syncing while pull request and issue tracker sync fail. The error names the host and the remedy:
Add it to the collector .env and restart the container:
It applies to the whole collector process, and only to an instance URL you configured on a connection. RFC 1918 and IPv6 ULA addresses become reachable; loopback, link-local and cloud metadata addresses stay blocked.

Running Multiple Collectors

Run multiple collector instances for higher throughput or geographic distribution. Give each one a unique COLLECTOR_NAME: collectors that share a name still all connect and receive work, but the admin list then shows several rows under the same name, which makes them hard to tell apart. The Navigara backend distributes work across connected collectors with affinity routing; it prefers a collector that already has the repository cached.

Network Requirements

The collector host must have outbound access to the following services:
No inbound ports need to be opened. The collector initiates all connections outbound.

Upgrades

Verify the new release before you run it, exactly as you did at install.
  1. Verify the new digest, as in step 2.
  2. If your .env sets COLLECTOR_ID, rename it to COLLECTOR_NAME. The old name is ignored, and the collector starts as collector-1 until you rename it.
  3. Update NAVIGARA_VERSION and COLLECTOR_IMAGE in .env, then restart.
The collector is stateless. Stop and restart it at any time without data loss. The Navigara backend reassigns in-progress work. To roll back, put the previous digest back in .env and repeat.

Emergency security releases

Navigara ships an emergency release within 48 hours for a vulnerability under active exploitation, and within 24 hours for a compromise of Navigara-issued credentials. We notify the technical contact on your account directly in both cases. See Full on-premises → Emergency security releases for the full policy and what to do on your side.

Troubleshooting