Documentation / Security

Credential vault

Yuli finds loose .env files, keys and tokens in your project and offers to store them encrypted outside the repository, without breaking your runs.

Yuli detects loose credentials in your project (a .env at the root, private keys, tokens in .npmrc, service accounts, secrets written in code…) and offers to store them in an encrypted vault outside the repository. Nothing moves until you confirm.

What it detects

Type Examples
Environment .env, .env.local, .env.production… The templates .env.example, .env.sample and .env.template don't count.
Keys and keystores *.pem, *.key, *.p12, *.pfx, *.jks, id_rsa, id_ed25519
Tool credentials JSON service accounts, credentials.json, .npmrc, .yarnrc or .pypirc with a token, .aws/credentials, kubeconfig, Docker config.json, *.tfvars, .netrc, .git-credentials, .pgpass
Code Secrets written directly in source code

Each finding shows its git status. These cases are flagged as more severe:

Badge Meaning
Tracked by git The file is versioned.
Not git-ignored The file is not ignored: the next commit could upload it.
In git history It was pushed to the repository at some point.

The "Exposed credentials" card

When Yuli finds something, the Exposed credentials card appears. For each finding you choose:

  • Move to the vault (recommended): Yuli copies it encrypted into the vault, checks the copy and only then deletes the original. It creates a .env.example with empty keys and adds the pattern to .gitignore.
  • It's fine as it is: leaves it where it is. Write the Reason and press Remember so it doesn't ask again.
  • Open: opens it in the editor.

You can always Restore a moved file.

Moving a .env step by step

0 of 6 done

If the file was ever pushed to git, moving it is not enough: the secret is still in the history. Yuli warns you to rotate it (change the password or token) and shows you how to clean the history with git filter-repo. Yuli never rewrites history on its own.

Where it lives and how it is encrypted

Default location <config>/yuli-ide/vault/<project-id>/, in your user configuration folder, outside any project
Permissions Only you: 0700/0600 on macOS and Linux, an ACL for your user on Windows
Encryption on Windows DPAPI
Encryption on macOS and Linux AES-256-GCM, with the master key in the system keychain

If the system doesn't offer that protection, Yuli moves nothing.

You can choose another folder (for example, an external drive) with Change location…, as long as it is outside the project and outside any git repository.

Options

In Global options › Security › Credential vault:

Option What it does
Change location… Picks another folder for the vault.
Inject Passes the vault's variables to your runs. By default .env, .env.local and .env.development are injected.
Materialize on run Writes a temporary .env while the run lasts.
Add variable Adds a new variable straight to the vault.
Create .env.example in the project Generates the template with empty keys.
Show Reveals a value for 20 seconds.

Your project keeps working

When you run something (run configurations, tasks and the integrated terminal), Yuli injects the vault's variables as environment variables. dotenv libraries respect them because real variables take precedence.

If your tool needs the file on disk, turn on Materialize on run: Yuli writes a temporary .env (permissions 0600, git-ignored) only while the run lasts and deletes it afterwards.

And the AI agents

Agents (Claude Code, Kiro, Codex, Antigravity, Copilot and Yuli's chat) never see the values. The agent hooks deny access to the vault folder and, if a value shows up in terminal output, it is masked.

Agents can still help you find the problem with two tools that return no values:

Tool What it does
yuli_vault_findings Read-only: paths, kind, severity, git exposure, variable names and what the vault already holds. Never a value.
yuli_vault_propose_move Shows you Yuli's card with the files it suggests moving and why. It moves nothing: you decide in the card.

So the agent can say "there's a .env at the root, shall I move it to the vault?", but it can never read it. See also Secrets and privacy.