Open source · Linux · on 1Password or its own vault

A password manager
for coding agents.

Your agent finds, uses and saves secrets without ever seeing them. You approve once per task and project, not once per shell.

A real session, replayed. When the approval window opens, you answer it.

claude — ~/Code/shop
How it works

Use credentials as freely as a trusted teammate would.

Without the secret entering the model’s context, and without you babysitting every shell. The agent works with references; visipassd decides what may resolve them and hands the values straight to the command.

agent
Claude Code, Codex, …
op://Dev/Stripe Test Key/credential

Sees references, receipts and masked output.

visipassd
Grants, approval, log
  • Who is asking: the agent from the process tree
  • Where: the session’s project and git remote
  • What: operation and exact references
your command
cargo test, bun dev, kamal…
STRIPE_KEY=sk_test_••••

Gets the value in its environment. Its output is masked on the way back.

Zero plaintext in the model

Find, write and run with op:// references. Printing a value to the agent is a separate operation you grant by name, and it is logged.

One approval per task

The prompt names the agent, project, git remote, command, every secret and the agent’s stated purpose. Inside a grant there are no prompts at all.

Grants never widen

A grant covers the exact agent, project, operation and references you saw. A new key, or reading instead of running, asks again.

Every request on the record

Written to a SHA-256 chained log before the result goes back. If the log can’t be written, the request fails.

Approvals

Five answers. Deny is the default.

The window opens on Deny, ignores input for its first 700ms so a stray keypress can’t approve, and Escape, closing it or a crash all deny. No agent can approve its own request: there is no vp approve, and nothing an agent sets decides where the prompt appears.

On Omarchy it takes your theme’s colours, fonts and Hyprland’s rounding every time it opens.

  1. d
    Deny
    Refused. The agent is told not to retry and to ask you instead.
  2. o
    Once
    This one request.
  3. t
    This task
    Until this agent session ends.
  4. h
    8 hours
    This agent, in this project, for 8 hours.
  5. a
    Always
    This agent, in this project, until you revoke it.
Masking

When a command prints the secret, nobody reads it.

vp run masks every injected value in the command’s output as <vp:NAME>, including its base64, URL-safe base64, percent-encoded and JSON-escaped forms, even when a value is split across chunks. This is the same masker, running on what you type. Nothing leaves your browser.

what the command printed
 
what you and the agent see
 

VisiPass is not a sandbox: a command given a secret can do anything with it. Masking keeps it out of the transcript, not out of the command.

In the browser

And for you, a password manager.

The Chrome extension fills logins, passkeys and two-factor codes on the site they belong to, suggests strong passwords on sign-up and offers to save what you submit.

  • → Fills only the approved site, matched by the Public Suffix List, and only visible fields.
  • → Acts only on your real clicks, with its menu actually visible on screen.
  • → Imports from 1Password and Proton Pass, passkeys included.
  • → A desktop app and vp quick Quick Access, themed like the rest of your desktop.

Try it: click the keyhole in the email field, or switch to Sign up. The password is generated in your browser the way VisiPass generates one.

shop.example.com/login
Shop

Sign in

Log in as…
Save to VisiPass?
Shop
you@example.com · shop.example.com
Save Not now
Where the secrets live

Keep 1Password, or bring your own vault.

On 1Password

vp reaches your existing vaults through the 1Password CLI and adds grants, the approval prompt, masking and the access log. 1Password still stores and encrypts everything. This is the part to rely on today.

$ yay -S visipass-bin 1password-cli
$ vp doctor
VisiPass’s own vault early

End-to-end encrypted with a master password and Secret Key. vp import op brings your 1Password vaults over and every op:// reference keeps working. Syncs through a folder you already sync, as encrypted, signed files; there is no VisiPass server.

  • · Locks when you’re idle
  • · Locks with the screen
  • · Erases keys before sleep
  • · Fingerprint quick unlock

Internally reviewed, not yet audited from outside. Keep 1Password as your backup for now.

For the agent

One obvious command per goal.

Compact JSON on stdout, and errors that say what to do next. Give your agent the skill file and it knows the rules: batch, state a purpose, never retry a denial. There’s an MCP server too.

~/.claude/skills/visipass/SKILL.md
$ vp find openai stripe
# references, never values; one call for many queries
$ vp run --env "KEY=op://…" -- bun dev
# inject, run, mask the output
$ vp env run .env.tpl -- cargo test
# one approval for every reference in the file
$ vp env import .env --vault Dev
# move plaintext secrets into the vault, rewrite to refs
$ vp request --title "Stripe Live Key"
# you paste it in a VisiPass window; the agent gets a ref
$ vp create api-credential --clipboard
# save a new key; read back and verified, never overwritten
$ vp kamal-fetch --from "op://…" A B C
# a whole Kamal deploy in one approval
$ vp log · vp grant list
# what was asked for, by whom, and what you allowed
Install

Running in a minute.

Linux on x86_64 and aarch64, Omarchy first. Needs the 1Password CLI with app integration turned on.

1 · Arch / Omarchy
yay -S visipass-bin 1password-cli
1 · Any Linux

Download from the latest release and put vp, visipassd and visipass-prompt on your PATH.

2 · Teach your agent
cp SKILL.md ~/.claude/skills/visipass/

Then vp doctor.

Where it stands. 0.x, Linux only. The browser extension loads unpacked in Chrome and Chromium; it isn’t in the Chrome Web Store yet. No macOS or Windows builds yet. AGPL-3.0.