Trustabl Probe

Registre officiel IA et agents

Drafts a network allow list for agent tools and runs them in a network-blocked sandbox.

Installation

Ajoutez ceci à la configuration MCP de votre client (Claude Desktop : claude_desktop_config.json ; Cursor : .cursor/mcp.json ; VS Code et les autres utilisent la même forme « mcpServers »).

NPM package @trustabl/agent-network-access-probe
Claude Code
claude mcp add trustabl-probe -- npx -y @trustabl/agent-network-access-probe@0.5.0
Configuration JSON (Claude Desktop, Cursor, VS Code)
{
    "mcpServers": {
        "trustabl-probe": {
            "command": "npx",
            "args": [
                "-y",
                "@trustabl/agent-network-access-probe@0.5.0"
            ]
        }
    }
}
MCPB package https://github.com/trustabl/agent-network-access-probe/releases/download/v0.5.0/trustabl-agent-network-access-probe-0.5.0.mcpb

Documentation

Tirée du README du projet sur GitHub, actualisée chaque semaine. Les liens ouvrent GitHub.

Sommaire
  1. Probe
  2. How It Works
  3. Requirements
  4. Setup
  5. Commands
  6. License

Probe

Public product: Trustabl Probe

Runs your agent tool in an isolated OpenShell sandbox, observes the network destinations it actually reaches, and generates a least-privilege OpenShell network_policies draft from that evidence — no hand-written allow list required. Static analysis also flags hardcoded credentials, missing timeouts, and other reliability issues, with AI-generated fixes for each, reviewed one by one. Your source code never leaves your environment.

Language support: Static analysis is supported for Python, Go, JavaScript/TypeScript, Ruby, and Shell. Sandbox execution is available for all languages.

How It Works

  1. Your tool is uploaded to a sandboxed OpenShell environment and executed
  2. Runtime evidence is collected — network destinations reached, denials, crashes, warnings, policy violations
  3. Static analysis scans your source for hardcoded credentials, unauthorized network calls, missing timeouts, and more
  4. You get back a least-privilege OpenShell policy YAML (unsigned draft) built from what the tool actually reached, findings from both passes, and a fixed version of the code for each issue found

Each session can also be attested: an optional signed manifest of the run, using Sigstore keyless signing — no private key to manage. In CI (e.g. GitHub Actions with permissions: id-token: write), it signs with your workflow's identity automatically. Run locally without that, and it falls back to an interactive browser login bound to your personal identity, recorded in Sigstore's public transparency log — pass --no-sign to skip signing entirely instead.

Cloud metadata endpoints and link-local addresses (169.254.169.254, metadata.google.internal, 169.254.0.0/16, fe80::/10) are always excluded from the generated policy, regardless of what the tool actually reaches — pass --deny-list FILE to add your own hosts/IPs/CIDRs on top of that built-in set.

By default, everything a tool observably reaches (and isn't denied) goes into the draft. Pass --allow-list FILE to make that stricter: once supplied, an observed destination not on the list is flagged instead of auto-added — the allow list becomes the required source of truth, not just an addition to what was seen. --platform-allow-list FILE works the same way for platform must-reach endpoints (e.g. NIM, IdP) and tags matching entries source=platform in probe.profile.json.

If a tool's code contains a call shape with a real-world side effect — a network write, a subprocess call, a filesystem delete, destructive SQL — its sandbox execution is skipped by default (static analysis still runs and still reports on it) so a default run can never actually charge, delete, or modify anything. Pass --allow-write-tools to run it for real once you're ready, ideally alongside --env-fixtures FILE so the tool picks up staging/test-mode credentials instead of production ones.

Sandbox results are cached per tool under os.UserCacheDir()/trustabl-probe/results — keyed by the tool's source content and effective run config (base image, --sandbox-args, --env-fixtures content), not its filesystem path, so the same tool referenced by two different agent classes reuses one cache entry. probe.profile.json's cache_hit field reflects whether each tool's result came from the cache. Pass --no-cache to skip the cache entirely (neither read nor write) — always do this for release gates.

Requirements

  • A sandbox runner for --sandbox execution — pick one with --runner:
    • docker (default-friendly, no separate install beyond Docker itself) — Docker Desktop or Docker Engine, daemon running. No OpenShell required.
    • openshell (default --runner) — OpenShell installed, with openshell gateway start running. Also requires Python 3.8+ on the host machine, for dependency wheel downloads.
  • Access to an OpenAI-compatible LLM endpoint (OpenAI, Anthropic, Ollama, LiteLLM, LM Studio, etc.), only for generated fixes. Without --model, Probe still writes the policy, profile, findings and attestation.

Setup

1. Install a sandbox runner

Docker only (no OpenShell needed): install Docker Desktop or Docker Engine and make sure the daemon is running (docker info). Pass --runner docker to fix/watch — that's the whole setup.

OpenShell:

Download from build.nvidia.com/openshell, then:

openshell gateway start   # keep running in a separate terminal
openshell sandbox list    # verify CLI is on PATH
2. Configure an LLM (optional, only for generated fixes)

Local (Ollama):

brew install ollama       # macOS
ollama serve
ollama pull qwen2.5-coder:32b

Cloud: set OPENAI_API_KEY or ANTHROPIC_API_KEY — the endpoint is auto-detected from the model name.

3. Install autofix

macOS (Homebrew):

brew tap trustabl/autofix
brew install autofix

Windows (Scoop):

scoop bucket add trustabl https://github.com/trustabl/scoop-autofix
scoop install autofix

Linux / manual:

# Replace v0.1.0 with the latest version from https://github.com/trustabl/agent-network-access-probe/releases
curl -L https://github.com/trustabl/agent-network-access-probe/releases/download/v0.1.0/autofix_0.1.0_linux_amd64.tar.gz | tar xz
sudo mv autofix /usr/local/bin/
autofix version
Or use it from your coding agent (MCP)

Probe also runs as an MCP server, so a coding agent (Cursor, Claude Code, Claude Desktop) can check what Probe needs, install it, and scan a tool, then apply the fix hints itself. No model key is needed. See mcp/README.md.


Commands

fix — Generate a least-privilege policy from observed egress, and fix what's found
autofix fix --source ./my-tool
autofix fix --source ./my-tool --entrypoint tool.py --sandbox --model gpt-4o
autofix fix --source ./my-tool --existing-policy ./policy.yaml --model claude-3-5-sonnet-20241022

Flags:

FlagDefaultDescription
--sourcerequiredPath to the tool directory
--entrypointauto-detectedEntry point script(s) — can repeat for multi-file scanning
--model—Model name. Cloud: gpt-4o, claude-3-5-sonnet-20241022. Local: qwen2.5-coder:32b (recommended). Omit it to skip fix generation: the policy, profile, findings and attestation are still written, and --output json prints [].
--llm-urlauto-detectedOpenAI-compatible base URL. Auto-detected for gpt-* and claude-*. Required for all other models.
--api-keyenv varAPI key — defaults to OPENAI_API_KEY / ANTHROPIC_API_KEY / LLM_API_KEY
--llm-timeout5mPer-request LLM timeout (increase for slow local models)
--sandboxoffRun the tool in a sandbox for runtime findings
--runneropenshellSandbox runner: openshell or docker
--base-imageautoSandbox base image (default: auto-detected from entrypoint extension)
--sandbox-args—Arguments passed to the tool inside the sandbox. Value is a raw shell token — avoid shell metacharacters.
--existing-policy—Path to an existing OpenShell policy YAML to diff against the generated least-privilege policy
--deny-list—Path to a deny list file (one host/IP/CIDR per line, # comments) — evaluated on top of the built-in metadata/link-local deny
--allow-list—Path to a declared allow list file (one host/CIDR/*.suffix per line, # comments) — an observed destination not on this list is flagged, not auto-added to the draft
--platform-allow-list—Path to a platform allow list file (jail must-reach endpoints, e.g. NIM/IdP) — same format as --allow-list, tagged source=platform in probe.profile.json
--allow-write-toolsoffAllow sandbox execution of tools that appear to perform mutating/irreversible operations (default: skipped, static analysis only)
--env-fixtures—Path to a dotenv-style file (KEY=value per line, # comments) injected into the sandbox environment — lets a tool pick up staging credentials/endpoints instead of production ones
--no-cacheoffSkip the per-tool result cache entirely — neither read nor write it (use for release gates that must always execute for real)
--auto-acceptoffAccept all fixes without interactive review (useful for CI)
--no-signoffSkip Sigstore signing — no network call, no interactive browser flow, no public transparency log entry
--outputtextOutput format: text or json

Output files (written to --source directory):

FileDescription
network_policies.draft.yamlLeast-privilege OpenShell network policy (unsigned draft, built from observed egress)
probe.profile.jsonPer-tool egress table, grant-set hash, and scan metadata (unsigned)
probe.findings.jsonEvery finding (title, severity, evidence, fix hint) with file attribution — always written, independent of whether interactive fix review ran
autofix-attestation.jsonOptional signed behavioral manifest with source hash
autofix-session.jsonFull session log (findings, diffs, accept/reject decisions)
autofix-session.patchUnified diff of all accepted fixes

watch — Continuous improvement loop

Polls source files for changes. On every save, re-runs static analysis, rewrites network_policies.draft.yaml, probe.profile.json, probe.findings.json, and autofix-attestation.json, and prints a delta (score change, resolved/new findings, new source hash).

autofix watch --source ./my-tool
autofix watch --source ./my-tool --entrypoint tool.py --interval 1s

Flags:

FlagDefaultDescription
--sourcerequiredPath to the tool directory
--entrypointauto-detectedEntry point script(s) to watch
--interval2sPoll interval
--no-signoffSkip Sigstore signing — no network call, no interactive browser flow, no public transparency log entry
--deny-list—Path to a deny list file (one host/IP/CIDR per line, # comments) — evaluated on top of the built-in metadata/link-local deny
--allow-list—Path to a declared allow list file (one host/CIDR/*.suffix per line, # comments) — an observed destination not on this list is flagged, not auto-added to the draft
--platform-allow-list—Path to a platform allow list file (jail must-reach endpoints, e.g. NIM/IdP) — same format as --allow-list, tagged source=platform in probe.profile.json

verify — Verify an attestation and gate CI

Checks an attestation's content digest and Sigstore signature, then optionally fails (non-zero exit code) on a low score or critical findings. See docs/ci-gate.md for a full CI setup.

autofix verify ./autofix-attestation.json --min-score 70 --fail-on-critical
autofix verify ./autofix-attestation.json --require-signature --identity "https://github.com/acme-corp/.*"

Flags:

FlagDefaultDescription
--min-score0 (no gate)Fail if production_readiness_score is below this value
--fail-on-criticaloffFail if any critical findings are present
--require-signatureoffFail if no valid Sigstore signature is present
--identity—Regex the signer's certificate SAN must match
--issuer—Regex the signer's OIDC issuer must match
--outputtextOutput format: text or json

version — Print version
autofix version
autofix license

License

Apache License 2.0. See LICENSE, or run autofix license to read it in the terminal.

Questions fréquentes

Qu'est-ce que Trustabl Probe ?

Drafts a network allow list for agent tools and runs them in a network-blocked sandbox.

Comment installer Trustabl Probe ?

Il s'exécute sur votre machine. Dans Claude Code : claude mcp add trustabl-probe -- npx -y @trustabl/agent-network-access-probe@0.5.0. Pour les autres clients, collez la configuration JSON de cette page dans leurs réglages MCP.

Faut-il une clé API pour Trustabl Probe ?

Son entrée au registre n'indique aucune clé ni secret obligatoire. Certaines fonctions peuvent tout de même demander un compte auprès du service auquel il se connecte.

Trustabl Probe est-il open source ?

Oui. Son code est sur GitHub sous licence Apache-2.0.

Qui maintient Trustabl Probe ?

Il est publié par trustabl. AI.tn le référence sans le maintenir ni le recommander.

Issu du registre MCP officiel. Être listé n'est pas une recommandation : vérifiez le code et les permissions d'un serveur avant de lui donner accès à vos données.