Lyngvi – A Hardened Sandbox for AI Lyngvi 2.0.0 has launched as a hardened, agent-agnostic sandbox that runs autonomous coding agents against a user's own repositories, with the agent working in a copied tree with a fresh .git, no default network route, and secrets held in a gateway sidecar. The tool ships as a JavaFX desktop app and a CLI that both call the same Java core, which is the only component that talks to git and Podman; outbound connections pass through a Squid proxy with an allowlist and an explicit blocklist of known exfiltration endpoints evaluated first. Changes return as a patch classified file by file on the host and committed only to a working branch after human approval — never to main — with the sample session showing 2 files committed on agent/fix-login while bin/run.sh was held as EXECUTABLE and ../secrets.env rejected for PATH_TRAVERSAL. Lyngvi is a hardened, agent-agnostic sandbox for running autonomous coding agents against your own repositories. You drive it from a desktop app — the conversation, the diff and the delivery in one window — or from the command line, which is the same product without the window. The agent gets a working copy, a toolchain and a controlled way out. It never gets your credentials, your git history or a route to the internet. The app: a conversation per task, the agent’s work as it happens, and the bar above the composer saying what is waiting to be delivered — three files, one of them held back. Everything the app does is also a command. The CLI ships inside the app and in a package of its own, and both call the same core: a first run, start to finishsh ./setup.sh --sandbox ~/sandboxes/shop init --repo ~/src/shop✔ sandbox created · profile "default" · 1 repository./setup.sh build && ./setup.sh up✔ localhost/lyngvi-base:2.0.0✔ proxy and gateway up on 10.89.3.0/24 internal ./setup.sh session new --title "Fix the login redirect" --preset dev✔ session 7f3a2c · container lyngvi-shop-7f3a2c · 8g / 4.0 cpusecho "Find and fix the login redirect bug" | ./setup.sh session ask 7f3a2c … reading src/auth.ts, running the test suite ✗ DENIED api.telemetry.example → not on the allowlist 3 files changed, tests green./setup.sh session review 7f3a2c apply src/auth.ts +12 −3 apply tests/auth.spec.ts +58 −0 hold bin/run.sh EXECUTABLE reject ../secrets.env PATH TRAVERSAL./setup.sh session apply 7f3a2c --branch agent/fix-login✔ 2 files committed on agent/fix-login Named after the island in Norse mythology where the wolf Fenrir was bound: a place where great power is kept within defined boundaries. Making a sandbox, talking to the agent, reading the diff and delivering what you approve are all in the app, and none of it needs the terminal. Every screen below is the real JavaFX app, run against a sandbox with one repository, three conversations and a change waiting to be reviewed. No mock-ups, no retouching. Every reply shows what the agent read, searched, ran and edited — with +/− counts on each edit — and what the turn cost in tokens and dollars. The strip above the composer says what is waiting for delivery, and that one file is held back. Lyngvi 2.0.0 · dark theme · sandbox «shop» The four premises The product is the boundary Everything else in Lyngvi is shell around these four. They are the reason an agent can run unattended in a repository you care about. 01 No direct network access The session container sits on an internal network with no default route. Every outbound connection goes through a Squid proxy with an allowlist, and an explicit blocklist of known exfiltration endpoints is evaluated first. squid · allowlist + blocklist 02 No access to your .git The agent works in a copy with a fresh .git — no hooks, no config, no remotes, no credential helper. The whole git attack surface is removed structurally, not by policy. copied working tree 03 Secrets live in a gateway sidecar Internal systems are reached through a read-only, allowlisted API that holds the token. The agent only ever sees a hostname. A plugin cannot read the secret: the runtime injects it into a locked upstream object. never a token in the container 04 Validated, human-approved delivery Changes come back as a patch, classified on the host file by file, reviewed by you, and committed to a working branch. Never to main, never silently. apply · hold · reject Architecture One core, two front-ends, three layers of containment All logic lives in a Java core that both the CLI and the JavaFX GUI call in-process. The core is the only thing that talks to git and Podman. Select a part of the diagram to see what it guarantees. Your machine JavaFX GUIsetup.sh → lyngvi-cli lyngvi-core git · podman · statestate/ and .sessions/ Shared stack podman compose Squid proxy → InternetGateway sidecar → Internal systems internal network · no default route One container per conversation /work/