Verbind de lokale Ollama op je laptop met Entity Enricher via één commando. Gebruik de modellen die je al hebt, houd bepaalde invoer op je eigen machine en trek toegang direct in — allemaal via één uitgaande HTTPS-verbinding.
Production (Hetzner) Your Laptop / your server
┌─────────────────────────┐ ┌────────────────────┐
│ Org enrichment │ │ ee-tunnel CLI │
│ │ │ │ │ │
│ ▼ │ │ ▼ │
│ Ollama provider URL: │ │ Ollama :11434 │
│ http://ollama.<org> │ │ ┌──────────────┐ │
│ .tunnel/v1/chat │ │ │ qwen3:36b │ │
│ │ │ │ │ llama3:70b │ │
│ ▼ │ │ │ ... │ │
│ WebSocket bridge │◀───────▶│ └──────────────┘ │
└─────────────────────────┘ └────────────────────┘
one outbound :443/wss connectionDe synthetische hostnaam ollama.<org-slug>.tunnel wordt nooit door DNS omgezet. Een aangepast transport in het Entity Enricher-proces onderschept verzoeken voor *.tunnel en routeert ze via de bijbehorende actieve WebSocket.
Voer verrijkingen uit tegen open-weight-modellen die al op je laptop zijn opgehaald (Llama 3, Qwen, DeepSeek, Mistral, …) zonder ze opnieuw te downloaden op de server.
Voor gevoelige prompts kun je specifieke enrichments via je eigen GPU laten lopen. Het platform registreert nog steeds kosten, tokens en metadata — alleen de inferentie zelf blijft lokaal.
Haal een model op met `ollama pull` op je laptop, klik op Modellen ontdekken, en het verschijnt in de Entity Enricher-selector met echte contextlengte en mogelijkheden.
Wanneer een gehoste provider je snelheid begrenst, schakel je over naar een getunneld lokaal model voor de rest van een batch.
Twee commando's op je laptop, één klik in de browser. De hele flow duurt ongeveer een minuut.
Open API Keys → Ollama Tunnels en klik op New Ollama Tunnel. Typ een label zodat je dit apparaat later herkent (bijv. "Anthony's MacBook").
Plak dit in een terminal. Het script verifieert een cosign-handtekening voordat het installeert.
curl -fsSL https://entityenricher.ai/install.sh | sh
Het installatieprogramma toont wat het gaat doen (download-URL, handtekening, installatiepad) en pauzeert 5 seconden zodat je een Ctrl+C-venster hebt. De broncode staat op TOT-Concept/ee-tunnel (MIT). Windows-gebruikers gebruiken in plaats daarvan install.ps1.
Voer ee-tunnel pair uit. Er opent een browsertabblad op /tunnel/connect met een code van 6 tekens. Bevestig het apparaatlabel en klik op Verbinden.
ee-tunnel pair --server https://entityenricher.ai Open this URL in your browser to confirm pairing: https://entityenricher.ai/tunnel/connect?code=9KV-DU6 Code: 9KV-DU6 Waiting for confirmation...
Je kopieert en plakt nooit een token. De browser ziet alleen tunnelmetadata; de CLI ontvangt zijn inloggegevens via zijn eigen pollingkanaal.
Voer ee-tunnel uit. De statusindicator op het tabblad Tunnels springt binnen enkele seconden naar Verbonden. Klik daarna op Modellen ontdekken bij de Ollama-provider in Modellen & prijzen om elk lokaal geïnstalleerd chatmodel automatisch te importeren.
Koppelen gebruikt een OAuth-achtige device-code-flow (vorm van RFC 8628). De gebruiker typt een korte code in een browser in plaats van een token te kopiëren en plakken. De browser ziet alleen tunnelmetadata; de CLI ontvangt zijn refresh-token rechtstreeks via zijn eigen pollingkanaal — eenmalige inwisseling.
laptop entity-enricher browser
│ │ │
│── ee-tunnel pair ──────▶ │ │
│ --server URL │ │
│ │ │
│ POST /api/tunnel/ │ │
│ device-code │ │
│ ───────────────────────▶ │ │
│ ◀── { device_code, │ │
│ user_code='9KV-DU6', │ │
│ verification_uri } │ │
│ │ │
│ prints URL, opens │ │
│ browser at /tunnel/ │ │
│ connect?code=… ──────────────────────────────────────▶│
│ │ │
│ │ POST /api/tunnel/confirm/ │
│ │ {user_code} │
│ │ body: { label } │
│ │ Authorization: Bearer │
│ │ <user JWT, role=owner> │
│ │ ◀──────────────────────────── │
│ │ • create tunnel_credentials │
│ │ • mark device_code complete │
│ │ with refresh_token │
│ │ ────────────────────────────▶│
│ │ 200 { tunnel metadata } │
│ │ │
│ POST /api/tunnel/poll │ │
│ ───────────────────────▶ │ │
│ ◀── { status:'ok', │ │
│ refresh_token, │ │
│ server_url, │ │
│ tunnel_id } │ │
│ │ │
│ persist token mode 0600 │ │
│ ✓ Paired │ │Zodra de verbinding tot stand is gebracht, is je getunnelde Ollama gewoon nog een LLM-provider voor de rest van het platform. Multi-expertise, fusie, batch — alles werkt ongewijzigd.
enrichment job
│
▼
agent_factory → Ollama provider, base_url=http://ollama.acme.tunnel
│
▼
custom httpx transport ← intercepts *.tunnel hosts
│
▼
TunnelSession (one per laptop)
│ frames request: { id, method, path, headers, body_b64 }
▼
WebSocket ──────────────────────▶ ee-tunnel CLI
│
▼
localhost:11434
(your local Ollama)
│
response_start, response_chunk, ...
◀──────────────────────────────────┘
│
▼
pydantic_ai consumes streaming body → enrichment recordMeerdere lopende enrichments delen één tunnel-WebSocket. Elk verzoek krijgt een UUID; frames worden aan beide kanten op id gedemultiplext, zodat gelijktijdige aanroepen (bijv. multi-expertise) vanzelf werken.
Streamingantwoorden (Ollama's stream=true) worden verzonden als een reeks response_chunk-frames, zodat token-voor-token UI-updates incrementeel blijven, zelfs via de tunnel.
Een organisatie-eigenaar klikt op "Nieuwe Ollama-tunnel", typt een label en bevestigt. Het platform wijst de inloggegevens toe.
Voer op je laptop de installer van één regel uit en `ee-tunnel pair`. Er opent een browsertabblad — bevestig met hetzelfde Entity Enricher-account.
Voer `ee-tunnel` uit. De CLI opent één uitgaande HTTPS-WebSocket. De nieuwe provider verschijnt binnen enkele seconden in je modellenlijst.
Klik op Discover Models — elk model in je lokale Ollama wordt automatisch geïmporteerd met echte contextlengte en mogelijkheden. Verrijk zoals gewoonlijk.
Eén klik in de UI breekt de WebSocket af en maakt de inloggegevens onmiddellijk ongeldig.
De tunnel is ontworpen om zo min mogelijk aanvalsoppervlak toe te voegen. De eerdere versie van de functie gebruikte een openbare SSH-server op een nieuwe poort; die hebben we vervangen door de in-process WebSocket-multiplexer om het SSH-aanvalsoppervlak volledig te elimineren.
Alles loopt via de bestaande :443-ingress — hetzelfde TLS-eindpunt als de webapp. Geen SSH-server, geen blootgestelde Ollama-poort.
De CLI initieert de WebSocket. Je laptop accepteert nooit inkomende verbindingen — de firewall van je thuisnetwerk hoeft niet te veranderen.
Een tunnel is gebonden aan één organisatie. Andere tenants op het platform kunnen hem niet zien, selecteren of aanroepen. Systeembeheerders hebben opzettelijk zicht op alle organisaties.
Intrekken verwijdert de inloggegevens uit de database. Het volgende verzoek mislukt met 401. De actieve WebSocket wordt binnen ~1 seconde verwijderd.
De browser-OAuth-flow verwerkt de inloggegevens end-to-end. De browser ziet je refresh-token nooit; de CLI ontvangt het rechtstreeks via zijn polling-kanaal.
Standaard 5 actieve tunnels per organisatie; limiet van 16 MB voor inkomende WebSocket-frames; gestructureerde 402-fouten bij overschrijding van het quotum.
SSRF-bescherming. De tunnel-functie dicht ook een bestaand gat: het veld specific_endpoint op Ollama-providers wordt nu gevalideerd tegen een allowlist-regex, zodat privé-IP's, loopback en Docker compose-servicenamen nooit als provider-URL kunnen worden gebruikt.
| Opdracht | Wat het doet |
|---|---|
| ee-tunnel pair --server URL | Browser-OAuth-koppeling. Opent automatisch de verificatie-URL. |
| ee-tunnel pair --server URL <token> | Handmatig koppelen met een refresh-token die je uit de UI kopieert (fallback voor headless-omgevingen). |
| ee-tunnel | Verbind en bedien. Maakt opnieuw verbinding met exponentiële backoff (1s → 30s) bij tijdelijke onderbrekingen. |
| ee-tunnel status | Toon koppelingsstatus, server-URL, geconfigureerde Ollama-URL, label. |
| ee-tunnel disconnect | Lokale inloggegevens vergeten. Trekt niets in aan de serverzijde; gebruik daarvoor de UI. |
| ee-tunnel version | Afdrukversie. |
Als je Ollama op een andere poort luistert, stel dan EE_TUNNEL_OLLAMA_URL in of geef --ollama URL mee bij het koppelen.
macOS · ~/Library/Application Support/ee-tunnel/
Linux · ~/.config/ee-tunnel/
Windows · %APPDATA%\ee-tunnel\
| Actieve tunnels per organisatie | 5 (standaard) |
| Refresh-token-TTL | 365 dagen |
| TTL van access-token | 15 minuten |
| Koppeling-TTL | 10 minuten |
| Max. inkomend WebSocket-frame | 16 MB |
| Uitgaande chunkgrootte (CLI) | 16 KB |
| Heartbeat-interval | 30 seconden |
Nee. De CLI start een uitgaande WebSocket. Je laptop accepteert nooit inkomende verbindingen en je Ollama-poort blijft gebonden aan localhost.
De CLI sluit netjes af bij een verbroken verbinding. Als je de laptop hervat en ee-tunnel opnieuw uitvoert, wordt de verbinding hersteld met de bestaande inloggegevens. Verrijkingen die lopen terwijl de tunnel uit staat, mislukken met een nette ConnectError.
Nee. Elke tunnel is gekoppeld aan één organisatie. Andere tenants op het platform kunnen hem niet zien, selecteren of aanroepen. Systeembeheerders kunnen standaard alle tunnels zien (net als globale API-sleutels).
Bijna altijd — alleen uitgaande :443 is nodig. Hetzelfde pad dat de webapp gebruikt.
Klik op "Token roteren" op het tabblad Tunnels. Het oude token wordt onmiddellijk ongeldig; de modal toont een nieuw pair-commando voor je laptop.
Ja — de CLI stuurt willekeurige HTTP door. Stel EE_TUNNEL_OLLAMA_URL in op elk lokaal OpenAI-compatibel endpoint. Alles wat Ollama's /v1/chat/completions of /api/tags spreekt, werkt.
De CLI en installer zijn MIT-gelicentieerd en staan in een openbare repository, zodat iedereen kan controleren wat er op zijn machine draait.
Bron: github.com/TOT-Concept/ee-tunnel
Releases: github.com/TOT-Concept/ee-tunnel/releases — elke binary wordt vóór publicatie ondertekend met cosign.
Controleer het installatieprogramma: curl -fsSL https://entityenricher.ai/install.sh | less