Conceptsince 1.0.0-alpha.3
Glossary
Terms used by penv, Penv Cloud and these docs, each linked to the page that documents it.
Terms
| Term | Meaning |
|---|---|
| AAD | Additional authenticated data bound into an encrypted value. penv binds the value's full address |
| AES-256-GCM | The cipher every stored value is sealed with |
| address | {org}/{project}/{environment}, plus the key's name |
| agent session | A session penv detected as a coding agent. Turns on sealed runs, JSON output and reveal approval |
| approval | The request penv reveal creates under an agent, answered by a person in the console within 10 minutes |
| audit log | The append-only record we keep of every action in your workspace |
| audit log retention | 14 days on Free, 180 on Pro; Enterprise entries are not deleted on a schedule |
| bundle | One environment encrypted into .penv/<env>.bundle by penv bundle, opened with PENV_BUNDLE_KEY |
| bound keypair | An Ed25519 keypair a plain server uses to prove identity when it can prove nothing else |
| bundler prefix | A name prefix such as NEXT_PUBLIC_ or VITE_ that ships a key to the browser. penv treats such a key as public |
| BYOK | Your Enterprise workspace using your own key in AWS, Google, Azure or Vault |
| cache | The sealed local copy of an environment penv run read. Fresh for 60 seconds in development |
| cloud mode | The @penv= header in .env.schema names a project |
| credential | pcu_ for a person, pck_ for a machine |
| decorator | An @ line above a key, such as @type=url or @rotate=90d |
| device-code login | What penv login does: a code approved in the browser. No password reaches the command line |
| DPA | Data processing agreement |
| drift | A key in a value file that the schema does not declare. Reported by penv check |
| dynamic parameter | A key with no stored value, minted on request under a lease |
@dynamicFrom | The schema marker our console reads for a dynamic parameter. penv ignores it with a warning |
| @env-spec | varlock's decorator specification, the grammar .env.schema is written in |
| envelope encryption | Values sealed under data keys scoped to your workspace, each encrypted by the workspace's master key |
| environment | development, staging, production, or any name you create in the console or with penv env new |
| environment variables | The names application code reads, such as DATABASE_URL |
| ETag | The tag penv run sends so an unchanged environment costs one request |
| exit code | 0 ok, 1 error, 2 auth, 3 validation, 4 confirmation required, 5 no credential, 6 environment refused |
| generation counter | Advanced on every bound-keypair login, so a clone locks out both machines |
| guard | The deny rules and hooks penv guard writes into each harness's config |
@hosts | The hosts a key's value may reach in a sealed run |
| harness | The tool a coding agent runs inside: Claude Code, Codex, Cursor, Amp, Copilot CLI, Gemini, Cline or Windsurf |
| hook | penv hook claude-code and its siblings. Every hook runs the penv binary |
| KMS | The key management service holding the master key that wraps every data key |
| language target | What penv gen writes: ts, py, go, rust, php, java or csharp. Settings live in [targets.<name>] in .penv/config.toml |
| lease | The expiry attached to a dynamic value, recorded without the credential |
| local mode | No @penv= header. Values come from your value files |
| machine identity | An identity bound to one project and environment, holding a role, taking no seat. CLI: penv machine |
| manifest | What penv help --json prints. The docs, the completions and the agent skill read it |
| masking | Values scrubbed from program output. On by default in every penv run. Covers base64, hex, percent-encoded and JSON-escaped forms |
| OIDC token exchange | A pipeline's signed platform token traded for a 15-minute penv credential |
pca_ | An app grant: the long-lived proof of a connection you approved. It is replaced at every use and trades for a read-only pck_ |
pce_ | The one-time secret penv machine enroll takes. Never usable as a credential |
pck_ | A machine credential: issued in the console, or minted by an exchange with 15 minutes on it |
pcu_ | A person's credential, stored in the keychain by penv login, valid 30 days from last use and at most 90 days |
PENV_ENV | The environment to read when --env is absent |
PENV_TOKEN | The machine credential a pipeline hands penv. Wins over the keychain |
| provider | Where cloud values come from, named by the @penv=<provider>: prefix. penv (Penv Cloud) is the default |
| principal | The person or machine a request acts as. The audit entry calls it the actor |
| project | One app or service. The middle part of an address, named by the @penv= header |
| role | A set of permissions granted at workspace, project or environment level |
| rotation | Replacing a value on a schedule: @rotate=90d in the schema, a new version via penv set or the console |
| SAML | The protocol behind company-login sign-in |
| schema | .env.schema: key names, types, and what a valid value looks like |
| SCIM | Directory sync that provisions and deprovisions members from an identity provider |
| sealed run | A penv run where @hosts keys reach the command as placeholders. Always on under an agent; --sealed otherwise |
| scope | The project and environment a credential or role is limited to |
| secret store | Encrypted storage for the values your apps read. What Penv Cloud is |
| sensitive | A value penv masks in output. Inferred true unless the key is bundler-prefixed, marked @sensitive=false, or the header says @defaultSensitive=false |
| session id | Identifies one agent run. Sent on every request from that run and stored on the audit entry |
| SLA | The availability commitment in an Enterprise contract |
| SSO | Single sign-on through the company's identity provider |
| step-up | The identity re-check the console requires before a sensitive action |
| tenant | A workspace: the billing and membership boundary |
| trust | An issuer, an audience and one exact subject that map a token to a machine identity. Holds no secret |
| value files | .env, .env.local, .env.<env>, .env.<env>.local, layered in that order |
| workload identity | Other vendors' term for a machine identity |
Retired terms
The 1.0 command line was rewritten in Rust, and these terms were retired with the old one.
| Old term | Replacement |
|---|---|
penv.config.ts, defineConfig | .env.schema, plus settings in .penv/config.toml |
| filesystem provider | Value files in local mode. A provider now names where cloud values come from |
| the four-scope cascade | Value files layered for one environment per run |
.enc files, the local envelope, PENV_KEY_* | Opt-in penv encrypt with a keychain key, or values stored with us |
$PENV_HOME, .penv/state | .penv/config.toml for remembered answers, and the platform cache directory |
penv doctor | penv check |
penv rotate | penv set, plus @rotate in the schema |
PENV_DELIVERY, PENV_CLOUD_TOKEN | PENV_TOKEN |
| materialize a parameter | Write a .env with penv pull |
Next: how penv works.
Secret scanning
We scan your connected GitHub repositories daily for committed credentials. We store where each one sits and a keyed hash, never the credential.
Adopt an existing app
Turn your .env into a committed .env.schema and .penv/config.toml, generate typed access, write agent guards, then push the values to us.