# airgap-check

> Open-source Go CLI that audits AI repositories for runtime downloads, telemetry, and network calls that break in offline or air-gapped environments.

airgap-check is an open-source command-line tool from Humanet that scans AI application repositories for libraries that download assets or contact external hosts when the network is unavailable. It combines static scanning of manifests, lockfiles and source code with an optional Docker-based run under `--network none`. The latest release listed is v0.2.2, and it is released under the MIT license.

## What It Is

airgap-check is a pre-deployment auditing tool for teams that want to run LLM apps in air-gapped VPCs, hospital or defense networks, or containers with no internet. Pointing an app at a local vLLM or Ollama instance does not guarantee offline readiness, because many libraries fetch tokenizer ranks, ONNX embedding weights, corpora, price maps, or telemetry on first use. The tool surfaces these before deployment. Its README states it is not a security certification and that a clean result does not prove an application is safe to run in an isolated network.

## How the Scan Works

The static scan inspects dependency manifests (such as `requirements*.txt`, `pyproject.toml`, `package.json`, `Cargo.toml`, `go.mod`, `Gemfile`) and follows lockfiles, tagging findings by scope such as prod, transitive lockfile, or optional extra. It also flags known runtime fetch calls like `nltk.download()`, `spacy.load()`, `from_pretrained()` and `tiktoken.get_encoding()`, remote model asset URLs, runtime update checks, and server and browser telemetry endpoints. Missing HTTP timeouts are reported separately as advisory robustness hints. `.env` files are inspected for key names and git tracking status only; secret values are never read or logged.

## Running in a No-Network Container

With `--run`, the tool starts an ephemeral Docker container with `--network none`, mounts the repository read-only, and injects a loopback observer. The observer uses DNS, TLS SNI and HTTP sinkholes plus Python and Node socket hooks to record attempted connections to a log file. Options include `--build` to build the repo's Dockerfile, `--run-cmd` for a custom smoke test, `--image`, and `--dns-action nxdomain`. The README documents limits, including validation only for Python, Node.js and built Dockerfile images, and that only exercised code paths are tested.

## Remediation Output

The `--fix` option prints a Dockerfile snippet with `ENV` flags that disable telemetry or enable offline modes, plus pre-warming commands for caches such as tiktoken, Hugging Face and ChromaDB models. Custom rules can be added through `.airgap-check.json` or `--rules`, and `--json` gives machine-readable output.

## Setup Path

Install via a shell script on macOS and Linux, with `go install` (Go 1.22+, also on Windows), or build from source. The tool uses only the Go standard library, and `--run` requires Docker.

## Features
- Manifest and lockfile scanning across Python, Node, Rust, Go and Ruby ecosystems
- Source pattern detection of runtime model and asset downloads
- Docker --network none run mode with DNS, TLS SNI and HTTP loopback sinkholes
- Python and Node socket hooks to record connection attempts
- -fix output with Dockerfile ENV flags and pre-warming commands
- Telemetry detection for server and browser SDKs
- Custom rules via .airgap-check.json or --rules
- Machine-readable JSON output
- Advisory robustness hints for missing HTTP timeouts
- .env key classification without reading secret values

## Integrations
Docker, Hugging Face, ChromaDB, tiktoken, LiteLLM, Playwright

## Platforms
WINDOWS, MACOS, LINUX, API, CLI

## Pricing
Open Source

## Version
v0.2.2

## Links
- Website: https://github.com/humanethq/airgap-check
- Documentation: https://github.com/humanethq/airgap-check
- Repository: https://github.com/humanethq/airgap-check
- EveryDev.ai: https://www.everydev.ai/tools/airgap-check
