As a process automation operator, I need the extension to fill a login by resource UUID, so that credentials never sit in, or are exposed to, automation processes like Python scripts, Selenium browser automation, or an AI agent’s context.
Q1. What is the problem that you are trying to solve?
Credentials are usually stored in .env files or other plaintext on disk: data science notebooks, data pipelines, and browser automation alike. That was always a weak spot, and AI makes it worse.
Securely managing, sharing, and auditing credentials across data science and process automation teams is close to impossible. AI coding tools read all project files into their context, including the env-file, and send them to the model provider. Prompt injection, the number one LLM risk per OWASP, can exfiltrate every secret with ease.
The structural fix is to separate three layers:
- orchestration: the automation tool or AI agent that decides what to do
- execution: the browser that does the work
- security: the password manager that holds the secret
For browser automation the passbolt extension is the ideal security layer, but one piece is missing: a way for an automation tool to have the extension fill a login without ever holding the password. Today there is no compliant option, since any tool keeps the password in an env-file, or even hard-coded, which fails OWASP, NIS-2, and GDPR Article 32.
The non-compliance goes away when an automation tool triggers a fill by resource UUID, the extension fills the login directly, and the credential never enters the automation tool or an AI agent’s context.
We already have this working end to end. The gif below shows the before and after: the password moves out of the env-file and into the vault, and the automation only triggers the fill, it never sees the secret.

Q2 - Who is impacted?
Anyone running automation against systems protected by passbolt: data scientists and data pipelines, RPA and ETL, scheduled logins, and browser-based tests. Teams adopting AI agents feel it most, since that is where the env-file risk is sharpest. The API is opt-in and off by default, so it changes nothing for anyone who does not enable it.
Q3 - Why is it important and/or urgent?
It closes a gap that, as far as we can tell, no one has closed yet. We are not aware of any password manager that lets browser automation fill a login without the automation tool ever holding the password, so passbolt could be the first to offer it.
It matters because there is currently no compliant way to give automation a login. Plaintext credentials in config are the number one exposure for AI agents per OWASP, they fall under NIS-2 for many EU companies, and once they pass through a US-hosted model they raise a GDPR Article 32 and Schrems-II question. The mechanism to avoid all of that simply does not exist today.
This turns the extension into the security layer for browser automation, so secrets stop living in env-files. The risk grows as AI adoption grows, so it gets more pressing over time, not less.
Q4 - What is your proposed solution? (optional)
A small, opt-in, signed message API that makes the extension the security layer. The orchestration tool triggers a fill and sees only a status, while the extension holds and uses the secret.
The design we prototyped:
- off by default; nothing works until the user enrolls a caller’s public key from the options page
- each request carries a per-request ECDSA P-256 signature, so the caller proves it holds a private key the extension never sees
- a single-use nonce and a short time window prevent replay
- the resource UUID is not a capability: resolution runs through the signed-in user’s own session, and the fill happens only when the tab’s address already matches the resource’s stored URL, using your existing suggestion matcher
- two actions only:
extension_statusfor discovery, andautofill_by_uuidfor the fill, with an honest filled or no-form status - every call is written to a local audit log, and inbound calls are rate-limited
- the transport is a content-script relay; the
externally_connectablesurface ships inert - it activates only against a Pro-edition server, reusing your existing edition check, so the community default is unchanged. The tiering is of course your call
The vault must already be unlocked. We do not propose programmatic unlock here, since that sits in tension with the zero-knowledge model.
Note: Due to forum restrictions I add the examples as replies.



