Secrets end up everywhere except somewhere safe.
One home server, ten .env files, no backup. agedrop started as the fix for exactly that.
-
Scattered
Values live in loose
.envfiles and secret folders on each machine. Lose the disk, lose the keys. There is no history and no backup. -
Hand-copied
Moving a key from laptop to server means pasting it into a terminal, a chat or a note. Every copy is another place it can leak.
-
Agents stall
An AI coding session needs an API key, writes "owner, please add this secret" and stops. Hours later it is still waiting, or worse, someone pastes the value into the chat.
How it works
Four steps, all of them plain files in git.
-
1 Say who may read what
Each machine, CI runner and owner has an age key pair. Public keys go in
recipients/. Scopes inagedrop.tomldecide which keys can open which secrets. Owners can always open everything, so a human can always rekey.# agedrop.toml [recipients] owners = ["libor"] mini = ["mac-mini"] ci = ["github-actions"] [scopes."mini/hq"] recipients = ["owners", "mini"] -
2 An agent files a request
A script or an AI agent that needs a value writes a small request file: scope, name, reason, and optionally how to generate it. The file holds no secret, so an agent can safely commit it.
# requests/r7k2.toml scope = "mini/hq" name = "VAPID_PRIVATE_KEY" reason = "Web Push key for plan #50" requested_by = "hq plan session #52" generate = "openssl ecparam -genkey …" -
3 You answer it
Paste the value in the CLI or on a static web page. It is encrypted on your device to the scope's public keys, and the same commit deletes the request. Writing needs no private key at all, so CI and teammates can add secrets too.
$ agedrop fulfil r7k2 value: •••••••••••• ✓ secrets/mini/hq/VAPID_PRIVATE_KEY.age ✓ removed requests/r7k2.toml $ git push -
4 The machine runs with it
The server pulls the repo and decrypts with its own key, straight into a process environment or an env file. The agent that asked gets a working service, never the value.
$ agedrop exec mini/hq -- docker compose up -d $ agedrop pull ci/deploy --env .env.deploy $ agedrop ls mini/hq VAPID_PRIVATE_KEY 2 min ago libor mini/hq DATABASE_URL 12 days libor ci/deploy CF_API_TOKEN stale · run rekey