#9747: feat(config): add pass (password-store) secret backend support
stale
Cluster:
Model Authentication Enhancements
Extends config substitution to support ${pass:path/to/secret} syntax. Secrets are retrieved via 'pass show' command at config load time.
- Adds MissingSecretError for failed lookups
- Caches pass lookups to avoid repeated calls
- 5 second timeout for pass commands
- Supports standard pass paths (alphanumeric, underscores, hyphens, slashes)
This allows openclaw.json to reference secrets stored in pass (GPG-encrypted) instead of storing credentials in plaintext.
Example:
"botToken": "${pass:openclaw/telegram/bot_token}"
<!-- greptile_comment -->
<h2>Greptile Overview</h2>
<h3>Greptile Summary</h3>
This PR extends config value substitution (performed during config load in `src/config/io.ts`) to support `${pass:path/to/secret}` in addition to the existing `${VAR_NAME}` env-var syntax. It adds a `MissingSecretError`, a `pass` lookup helper with a process-lifetime cache, and performs lookups via `pass show` with a timeout.
Main concerns are around (1) executing `pass` via a shell command string, and (2) user-facing behavior regressions/UX around escaping and error reporting (pass failures are not escapable with `$${}` and are reported as “Env var substitution failed” in config snapshots).
<h3>Confidence Score: 3/5</h3>
- This PR is close to mergeable but has a couple of user-facing and security-related issues to address.
- Score is reduced due to shell-based execution for secret retrieval, an escaping behavior mismatch for the new `${pass:...}` syntax, and misleading error labeling in config snapshot output. The changes are localized to config substitution, so fixes should be straightforward.
- src/config/env-substitution.ts, src/config/io.ts
<!-- greptile_other_comments_section -->
<sub>(2/5) Greptile learns from your feedback when you react with thumbs up/down!</sub>
<!-- /greptile_comment -->
Most Similar PRs
#21173: fix(config): support envFiles option in resolveConfigEnvVars for ga...
by Mellowambience · 2026-02-19
76.4%
#13958: Claude/secureclaw env supabase dz q hh
by kbpranay · 2026-02-11
72.7%
#10258: fix(config): preserve ${ENV_VAR} references when writing config (#9...
by nu-gui · 2026-02-06
71.3%
#23000: Secrets: add migrate rollback and skill ref support
by joshavant · 2026-02-21
70.9%
#21164: feat(config): add lenient mode to resolveConfigEnvVars — preserve g...
by Mellowambience · 2026-02-19
69.2%
#16663: feat: GCP Secret Manager integration for external secrets management
by amor71 · 2026-02-15
69.1%
#22744: feat: masked secrets — prevent agents from accessing raw API keys
by theMachineClay · 2026-02-21
68.6%
#23096: feat(secrets): add Bitwarden/Vaultwarden secret provider
by ihsanmokhlisse · 2026-02-22
68.6%
#10745: feat: Security improvements and Windows compatibility fixes
by lluviaoscuradeldoce-design · 2026-02-06
67.8%
#19538: security: migrate sensitive Docker env vars to Docker secrets
by Mozzzaic · 2026-02-17
67.6%