🔐 VaultPulse
What is VaultPulse?VaultPulse gives you a TreeView of the Azure Key Vaults you work with — grouped by client or environment — so you can check a connection string or API key without switching to the Azure Portal or the Built by Evolve, a data consulting studio. v1 is read-only. Creating, editing, or deleting secrets, and managing keys/certificates, are out of scope for now. Features
Getting StartedPrerequisites
Installation
First RunOpen the VaultPulse icon in the Activity Bar, expand a vault to list its secrets, and click the eye icon on a secret to reveal it. AuthenticationNo manual
ConfigurationVaults are declared per workspace — not in your global/user settings — so different clients or projects can each have their own vault list. There's no automatic discovery (no Resource Graph scan, no subscription enumeration): you decide exactly what shows up. Option A —
|
| Field | Type | Required | Notes |
|---|---|---|---|
alias |
string |
yes | Free-text display name shown in the tree, e.g. "Client A - Prod" |
vaultUri |
string |
yes | Full vault URL, must start with https://, no trailing slash — e.g. "https://clienta-prod.vault.azure.net" |
tenantId |
string |
no | Azure AD tenant GUID — only set this if the vault lives in a different tenant than your default Azure account (see Authentication) |
A couple of things that are easy to miss:
- The setting only exists at workspace scope — a folder must be open in VS Code, and it won't show up under your user settings.
- Hand-editing the JSON skips the validation that Add Vault does (no
https://check, no duplicate check) — a typo just shows up later as a vault that fails to expand. - The tree picks up changes to
.vscode/settings.jsonautomatically; you don't need to run Refresh after saving.
Commands
| Command | Description |
|---|---|
vaultpulse.openDocumentation |
Open this documentation in VS Code's Markdown Preview |
vaultpulse.filter |
Filter the tree by vault alias, or by secret name for vaults already expanded this session |
vaultpulse.clearFilter |
Clear the active filter |
vaultpulse.addVault |
Add a vault (prompts for alias + URI, writes to workspace settings) |
vaultpulse.refresh |
Refresh the vault/secret list |
vaultpulse.revealSecret |
Show the value of the selected secret |
vaultpulse.hideSecret |
Mask the value again |
vaultpulse.copySecret |
Copy the secret's value to the clipboard |
Filtering
Click the search icon in the panel toolbar (or run VaultPulse: Filter Vaults & Secrets) and type a search term:
- A vault whose alias matches is shown with all its secrets.
- A vault whose alias doesn't match is still shown if one of its secrets matches by name — but only for vaults you've already expanded at least once in this session (their secret names are cached in memory). It only shows the matching secrets, not the full list.
- Vaults you haven't expanded yet are matched on alias only — filtering never triggers a new Azure call.
The active filter shows next to the view title, and Clear Filter appears in the toolbar while a filter is set.
Troubleshooting
VaultPulse inspects the error returned by Azure and surfaces a specific message instead of a generic failure. Every error toast has a Show Details button that opens the VaultPulse output channel (View → Output → VaultPulse) with the full underlying error — useful when reporting an issue.
Sign-in was cancelled The browser tab opened for interactive sign-in was closed before completing. Use VaultPulse: Refresh to try again.
Access denied (403) — Key Vault has two authorization modes, and a 403 means something different in each:
- Azure RBAC: you're missing a role assignment (e.g. "Key Vault Secrets User") on the vault or a parent scope.
- Access Policies (legacy): you're missing an access policy entry granting
Get/Liston secrets.
VaultPulse tells you which mode applies and what to ask an owner for, rather than a generic "Forbidden".
Sign-in needs fresh consent
If your Azure session predates the vault's required consent for the https://vault.azure.net/.default scope, VaultPulse surfaces that explicitly rather than failing silently — it will reopen the sign-in browser tab on retry.
Not authenticated (401) Your session may not cover this vault's tenant. If the vault is in a different Azure AD tenant, re-add it via VaultPulse: Add Vault with the correct Tenant ID.
Vault or secret not found (404) Double-check the vault URI for typos, and that it's in the tenant your sign-in session (CLI or browser) actually authenticated against.
Local Data & Privacy
VaultPulse does not collect any data, and never persists secret values.
- Secret values: held in memory only, for the current VS Code session — never written to disk, never logged (including in debug output), cleared when you hide a secret or close VS Code
- Vault and secret names: may be cached locally for UX (e.g. tree state) — values are not
- Vault configuration: stored in your workspace's
.vscode/settings.json, like any other VS Code setting - No telemetry, no backend, no external calls beyond the Azure Key Vault SDK talking directly to your vaults
Copying a secret uses vscode.env.clipboard.writeText() only — VaultPulse never writes secret values anywhere else.
Security posture
- Workspace Trust: VaultPulse declares
capabilities.untrustedWorkspaces.supported: falseand stays disabled in untrusted workspaces. Without this, an untrusted/cloned folder could ship a crafted.vscode/settings.jsonthat points VaultPulse at an attacker-chosen vault using your own credentials the moment you expand it. - Sign-in loopback port: the interactive browser sign-in binds to
127.0.0.1on an OS-assigned random port each time, never a fixed one, and only for the duration of the sign-in. - Auto-hide: a revealed secret masks itself again after 30 seconds, or immediately if the VS Code window loses focus (alt-tab, screen share, lock screen) — whichever comes first.
- Shared extension process: like every VS Code extension, VaultPulse runs in the same Extension Host process as your other installed extensions — VS Code doesn't sandbox extensions from each other the way a browser isolates tabs. Don't install extensions you don't trust on a machine used to access client secrets.
vaultpulse.vaultsin git: this setting exposes vault aliases/URIs (and optional tenant IDs) — never secret values, but potentially sensitive client/topology information. If.vscode/settings.jsonis tracked by git, VaultPulse: Add Vault warns you once (only when it detects the repo doesn't already ignore that file) so you can decide whether to add it to.gitignore.
Current Scope
Multi-vault, multi-tenant TreeView; reveal/hide; copy to clipboard; RBAC vs Access Policies error handling. Read-only — no key/certificate management, no create/update/delete.
Contributing
Issues and PRs welcome at github.com/Y0hannH/VaultPulse.
License
MIT © 2026 Evolve — Yohann
Built with ♥ by Evolve