VaultlineZero-trust context control for AI coding agents. Talk to your model through
Detection runs entirely locally. No telemetry, no accounts, nothing phoned home. How it worksYou type this:
The model receives this:
and you get the answer back with the real URL and password already restored in
the code. The model reasons perfectly well about Placeholders are typed and stable: the same value gets the same token for the whole session, so multi-step tool loops keep working. Tool arguments are rehydrated before the tool runs, and every tool result is redacted before it goes back to the model. Credentials mentioned across turnsReal conversations split a credential over two messages:
The second message has no keyword to anchor on. Vaultline carries the credential
context forward for a couple of turns, so the value is still caught. Tune with
What it catches
Structural rules (regex) always run. Contextual detectors are gated by a local embedding model so they only run where they're plausibly relevant — and if that model is unavailable, detection fails open: every detector runs instead of being skipped. Syntax-aware suppression parses code with tree-sitter so low-precision rules stop firing inside comments, while unambiguous secret rules keep firing there — because commenting out a config line is one of the most ordinary ways a credential ends up in a file. In the editorIndependently of chat, Vaultline marks up what it finds in open files:
Highlighting is an affordance, not the enforcement point — it skips the two detectors that need an embedding call, so an unhighlighted value may still be redacted on its way out. Anonymize and restore
Mask asks for confirmation first, and restore refuses on a masked document rather than guessing. Commands
The anonymize/restore commands are also in the editor's right-click menu. Scope: what
|
| Setting | Default | Purpose |
|---|---|---|
enablePiiDetection / enableInfraDetection / enableConversationalSecretDetection / enableBusinessContentDetection |
true |
Toggle each detection layer |
enableCrossTurnSecretCarryover / crossTurnSecretTurns |
true / 2 |
Keep detecting credentials for N turns after one is mentioned. Lower to 1 if unrelated value-shaped strings (commit hashes, build IDs) get redacted |
blockOnHighSeverity |
false |
Block instead of redact on a high-severity match. Off by default: inside a tool loop one false positive aborts the whole task, and redaction already keeps the value from leaving |
enableToolCalling |
true |
Whether @vaultline exposes vscode.lm.tools to the model |
enableSyntaxAwareRedaction |
true |
Stop low-precision rules firing inside code comments |
embeddingBackend |
"api" |
"api" (local model server, auto-managed) or "hashing" (zero-setup, no server) |
auditLogIncludeValues |
false |
Off by default — turning it on makes the audit log itself a plaintext record of every secret caught |
anonymizeMode |
"placeholder" |
placeholder / hash (reversible) or mask (not) |
disabled*Rules |
[] |
Per-category checkbox lists for excluding individual rules |
Privacy
Everything runs locally. The embedding server binds loopback only
(127.0.0.1), starting at port 9000 and moving to the next free port if
something else already holds it. It is started and stopped by the extension
itself. There is no telemetry and no account. The audit log is a local file
that, by default, records what type of thing was redacted and never the
value.
Pointing embeddingApiUrl at a remote endpoint is the one way to change that,
and it is opt-in.
Licensing
Apache-2.0. Bundled third-party components — including sharp (LGPL-3.0) and
its vendored libraries — are listed with their licences in
THIRD-PARTY-NOTICES.md inside the extension.