Docs
A 60-second quickstart: an empty Vault, one Secret, a Manifest declaring it, the Claude Code integration, and a command that uses the Secret without ever printing it.
Quickstart
# 1. Create a Vault. CPASS_KEY (CI) or the platform's unlock source
# (macOS Keychain, or a passphrase on Linux) supplies the encryption
# key.
cpass init
# 2. Store a Secret under a Handle. The value is typed at a hidden
# prompt — cpass add refuses without a terminal, so an Agent can
# never pipe a value it already knows straight into the Vault.
cpass add stripe/live
# 3. Declare the Handles this project needs. No values live in this
# file; it's meant to be committed.
cpass manifest init
cpass manifest add stripe/live
# 4. Wire up Claude Code: an Intercept hook, a Command Policy hook, and
# a skill teaching an Agent to use cpass. Idempotent — safe to re-run.
cpass integrate claude
# 5. Run the real command. cpass run reads the Manifest, injects
# stripe/live as $STRIPE_LIVE into this one child process, and
# nothing else — swap the sh -c '...' below for your actual
# deploy/curl/psql/gcloud command; the Secret reaches it the same
# way, by reading its own environment.
cpass run -- sh -c '[ -n "$STRIPE_LIVE" ] && echo "deploy: authenticated"'
The value of stripe/live is never typed into a
command line, never appears in this terminal's scrollback, and —
because Claude Code's plugin is installed — never gets past a
paste into the Agent's prompt either.
Vocabulary
- Secret
- A sensitive value (API key, password, token, private key) that must never appear in an Agent's Context.
- Handle
- An opaque name that refers to a Secret without revealing its value — the only form in which a Secret is ever visible to an Agent.
- Broker
- The local component that resolves a Handle into a Secret value at the moment a command runs.
- Manifest
- A committed, per-project file (
.claudepass.toml) declaring which Handles the project needs. Contains no values. - Capture
- Storing the output of a command directly into the Vault as a new Secret, so a value born in a tool result never reaches an Agent.
- Intercept
- Catching a Secret value in a human's prompt before it reaches an Agent, and moving it into the Vault instead.
- Exposed
- The state of a Secret whose value has entered an Agent's Context at least once — treated as compromised and due for rotation.