Find your next open-source project

Search by name, purpose, or keyword — or paste a GitHub repository URL

dreamers-laboratory/good-door

Security & Privacy

A CLI that encrypts secrets on disk and injects them into commands or agents without exposing values.

160
42
Python
MIT
3 days old

What it does

elbab is a command-line secret manager for people and for AI agents. It encrypts credentials already sitting on disk—SSH keys, AWS credentials files, .env files, tokens—and keeps the machine's encryption identity in the OS vault or a hardware-backed store such as Keychain, TPM, Secure Enclave, DPAPI, or a YubiKey plugin. Commands that need a secret receive it through an environment variable or a temporary decrypted file, so the value need not live in a plaintext file or appear in the agent's transcript (README lines 7–10).

The main operations are storing a named key with set-key, running a command with run, and reading a field with print. It also offers helpers to protect existing SSH, AWS, gcloud, and Azure credentials, a scan command that reports names rather than values, and a skill file for agent use (README lines 35–58, README lines 59–74).

Quick start

Requirements: Python 3.9+ and age 1.2+ (README lines 11–20). The project links to age for the underlying encryption tool (age).

Clone and install the launcher, then initialize the vault and move the recovery file offline:

git clone https://github.com/dreamers-laboratory/good-door && cd good-door
install -m 755 bin/elbab ~/.local/bin/elbab
elbab init --recovery ~/elbab-recovery.txt

On Windows, put bin\elbab and bin\elbab.cmd on PATH instead of using install (README lines 15–19). The init command selects a key backend: macOS defaults to Keychain, Linux uses TPM when available, and Windows defaults to DPAPI; --identity-file and --command accept an alternative source, such as a password manager that prints the key (README lines 21–34).

Store and use a secret:

elbab set-key openai OPENAI_API_KEY
elbab run openai -- python app.py

set-key prompts for the value rather than accepting it on the command line; run places it in the environment for the child process and does not write it to a file (README lines 35–58). To check a stored value, use elbab print openai OPENAI_API_KEY; --copy copies to a clipboard that clears after 30 seconds (README lines 37–47).

Existing credentials

For credentials already on disk, the README documents specific paths: elbab ssh-protect ~/.ssh/id_ed25519 assigns a random passphrase and elbab ssh-load fills the SSH agent; elbab aws-protect ~/.aws/credentials converts the file to keyless and configures AWS credential_process; elbab import-env app .env imports variables and elbab encrypt .env wraps the file in an age file at the same path (README lines 59–74). run accepts a path when it contains a slash or starts with . or ~, keeping the previous version in backups/ if the command changes it. A plain age -d (plus tar for a folder) can still recover the file without elbab, so there is an escape hatch (README lines 59–74).

Agents

The README provides an agent skill file for agents that should execute commands with a credential without reading its value (skill/SKILL.md). Output masking applies when output goes through a pipe or an agent shell environment such as CLAUDECODE or CODEX_THREAD_ID; --mask also masks on screen (README lines 37–47). For headless SSH use on Linux, the project ships a systemd unit example (contrib/elbab-ssh-agent.service).

Constraints

Anything running as the same user can invoke elbab, so it protects copies—backups, sync targets, transcripts, other accounts—not a compromised account. encrypt replaces the original file, but SSDs can retain old blocks, so full-disk encryption is a separate requirement. Encrypted files and folders are limited to 256 MB and do not support links. --show and --dump export everything after an OS password prompt (README lines 79–85). The test suite runs with python3 -m unittest -v tests/test_elbab.py; CI coverage for macOS, Linux, and Windows is triggered manually (README lines 86–88). The project is MIT-licensed (repository).

HotRepo's take

The project appeared on the Python new-repository list on 2026-11-07 with 109 stars, gaining 4 stars in the roughly one-hour window recorded that day, and had 42 forks. That is a short observation window and the best all-language daily rank is unknown, so the numbers show early attention rather than sustained traction. The design point worth watching is the explicit split between run (credentials injected without being printed) and print/show (values deliberately exposed to the terminal), which maps cleanly onto the agent-vs-human use case the README targets.

Written by AI from the project's README, updated . The project's own docs are the source of truth.