Access during SSH or Mosh
New requests from remote-login process trees, including shells nested beneath them, are denied before authentication or decryption.
Secure shell secrets for macOS
EnvEnclave keeps each environment value encrypted with Secure Enclave-backed keys, then releases it only in response to an approved local zsh request—so it is available when you need it.
Encrypted at restExact-folder scopedAuthenticated on release
Version 0.1.0 pre-release · Download available · Public security review in progress
4b10aa50e4ab445a65c0a5225a09407fa4d82523c88dd05d4b4845b849a54da329475d73ac7f3f617f14c43035fcfe83f83ce01ccd3f7cdb5c5021dcea567225c407d8fc
EnvEnclave narrows where protected values are stored and which local shell requests can receive them. Unverifiable requests fail closed.
New requests from remote-login process trees, including shells nested beneath them, are denied before authentication or decryption.
EnvEnclave writes no protected value to plaintext project or app files. Its encrypted records require a non-exportable, device-bound key.
A local shell must be a supported top-level zsh inside an explicitly approved, authentically signed terminal before EnvEnclave will authorize a release.
Exact-folder values release only when the live shell directory matches the saved path and file-system identity. Leaving removes the scoped export.
Copied or inauthentic helpers and direct socket clients fail live peer, signature, protocol, or process-tree checks before decryption.
Authenticated records make corrupted policy, broadened scope, or isolated stale-record replay fail closed. Values are assigned without eval, so their contents do not become shell syntax.
These controls cover storage and initial release. After an approved shell receives a value, it is plaintext in that shell and inheriting processes; a same-account SSH attacker may be able to inspect it there.
A deliberate boundary
EnvEnclave is precise about what it controls: encrypted storage, terminal approval, and the moment a value is released.
Keep a value global, or bind it to an exact canonical folder identity. Moving elsewhere removes the scoped export.
Live peer credentials, process ancestry, and exact code requirements are checked before any release is prepared.
A nonempty release asks for device-owner authentication and names the approved terminal making the request.
How it works
Each value is wrapped with an AES-GCM key derived through Secure Enclave P-256 key agreement.
Choose Global or one or more exact folders. Policy metadata is authenticated with the encrypted record.
The local request path validates the helper, shell, terminal, user, ancestry, and current working directory.
Approved values are delivered through a bounded literal protocol and assigned by zsh without eval.
Expiration reminders
Set an optional expiration date and EnvEnclave will surface the variable as that date approaches.
With macOS notifications enabled, EnvEnclave schedules one generic reminder per day without the variable name, value, folder, or record identifier.
A final generic notification is scheduled when notifications are enabled. The menu-bar notice identifies the variable that needs attention even when notifications are off.
Reminder, not revocation. Expiration never silently disables, deletes, or withholds a value. Rotate or delete it when you decide. Notification delivery is best-effort and depends on macOS settings.
Encrypted activity
Activity can show validated variable names, exact-folder or Global availability, and approved terminal identity.
Activity is not immutable, rollback-proof, or a complete forensic ledger.

Built in the open
EnvEnclave is pre-release software. Review the implementation, threat model, failure paths, and explicit non-goals before trusting it with anything important.