Install
openclaw skills install @jlacroix82/secrets-managerEncrypted local secret store for OpenClaw agents. AES-256-GCM authenticated encryption with per-secret random IVs, master key in chmod 0600 .master-key file. A PURE STORE: it encrypts, retrieves, lists, rotates, audits, and deletes secrets — it never writes plaintext secrets to disk or generates executable command scripts. Modes: --store (encrypt+write), --get (masked; --raw prints plaintext to stdout), --list (names+metadata only), --delete (irreversible), --rotate and --rotate --all (generate new random values, archive old as retired), --audit / --audit --expired / --audit --stale (exposure/rotation checks), --status. Supports SECRETS_DIR and SECRETS_MASTER_KEY env overrides. For injecting secrets into shell commands, use the separate secrets-inject skill (high-privilege). Master key is recoverable from .master-key file; losing it makes stored secrets unrecoverable.
openclaw skills install @jlacroix82/secrets-managerEncrypted local secret store. AES-256-GCM authenticated encryption. Master key auto-generated on first store and stored in memory/secrets/.master-key (chmod 0600).
Important: If you lose
.master-key, all stored secrets become unrecoverable. Back it up.
null from decrypt (no partial decryption)memory/secrets/.master-key with chmod 0600SECRETS_MASTER_KEY=<hex> env var--get --raw Prints Plaintext to stdoutThe secret value goes to stdout, which may be captured in:
Use only when piping to a private process:
node secrets-manager.js --get --raw api-key > /tmp/api-key.txt && chmod 600 /tmp/api-key.txt
Rotated secrets keep the old encrypted value as retired. Rotate again to discard the archive. There is no --undo for archival.
memory/secrets/secrets.json (chmod 0600) plus memory/secrets/.master-key (chmod 0600). Override via --dir <path> or SECRETS_DIR=<path>.
node skills/secrets-manager/secrets-manager.js --store openai-key sk-abc123
# Output: [secrets-manager] Stored: openai-key (masked: sk-****23)
node skills/secrets-manager/secrets-manager.js --get openai-key
# Output: [secrets-manager] openai-key: sk-****23
node skills/secrets-manager/secrets-manager.js --get --raw openai-key > /tmp/key.txt
# Output: sk-abc123 (captured to file)
node skills/secrets-manager/secrets-manager.js --list
node skills/secrets-manager/secrets-manager.js --delete old-key
node skills/secrets-manager/secrets-manager.js --rotate openai-key
# New random value generated, old encrypted value archived as retired
node skills/secrets-manager/secrets-manager.js --rotate --all
node skills/secrets-manager/secrets-manager.js --audit
node skills/secrets-manager/secrets-manager.js --audit --expired
node skills/secrets-manager/secrets-manager.js --audit --stale
node skills/secrets-manager/secrets-manager.js --status
memory/secrets/.master-key (chmod 0600)SECRETS_MASTER_KEY env var overrideretired (encrypted, recoverable until next rotate)Data stored in: memory/secrets/
secrets.json — encrypted secrets (chmod 0600).master-key — 256-bit master key as hex (chmod 0600)permissions.json — per-secret access rules (chmod 0600)Override storage location:
--dir /path/to/secrets
# or env var
SECRETS_DIR=/path/to/secrets node secrets-manager.js --status
Override master key:
SECRETS_MASTER_KEY=<64-hex-chars> node secrets-manager.js --get openai-key
When handling secrets:
--store <name> <value> writes AES-256-GCM ciphertext--get (not --get --raw) for display--audit during heartbeats.master-key — without it, stored secrets are unrecoverablememory/secrets/.master-key (chmod 0600) — back it upSECRETS_MASTER_KEY env var for ephemeral/CI environments--get --raw| Approach | Encryption | Setup | Audit | Rotation | Recovery |
|---|---|---|---|---|---|
| Environment vars | None | Medium | None | Manual | N/A |
| .env files | None | Low | None | Manual | N/A |
| Secrets Manager | AES-256-GCM | None | Auto | Auto | With .master-key |
| Vault service | Various | High | Auto | Auto | Yes |
Secrets Manager gives you real encryption + rotation + audit with zero external dependencies.