agent-opaque-env
Self-describing encrypted environment files for AI-assisted development.
The package keeps environment keys and values out of plain-text repository context. Its Rust
extension also raises the cost of casual static analysis. It is not a secret manager: an agent or
process allowed to call load_env() can read the returned values.
Install
uv add agent-opaque-env
The wheel contains the Rust implementation. Users do not need to install cryptography or a Rust
toolchain when a wheel is available for their platform.
Use
from agent_opaque_env import dump_env, load_env
dump_env({"APP_MODE": "development"}, ".env")
values = load_env(".env")
dump_env() defaults to the zero-configuration obfuscation profile. It creates an owner-only
file and stores shuffled key material with the ciphertext. This prevents direct text collection but
does not create a separate secret boundary.
For protection when the repository is copied without its key, use the protected profile:
from agent_opaque_env import dump_env, load_env
# Public example key only. Never use this key for real secrets.
key = "AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA="
dump_env(values, ".env", profile="protected", key=key, key_id="example-local")
values = load_env(".env", key=key)
Generate a unique key for real use and keep it outside the repository. Instead of passing key=,
applications may set the AGENT_OPAQUE_ENV_KEY environment variable. Missing or incorrect keys fail
explicitly and never downgrade to obfuscation.
from agent_opaque_env import generate_key
key = generate_key() # Store this outside the repository before encrypting files.
Self-describing AOE1 format
An AOE1 file is ASCII with exactly three lines:
AGENT-OPAQUE-ENV/1
{"algorithm":"AES-256-GCM","format":"AOE1","import":"agent_opaque_env","loader":"load_env","package":"https://pypi.org/project/agent-opaque-env/","profile":"obfuscation"}
{"ciphertext":"...","key_fragments":["...","...","..."],"nonce":"..."}
The fixed package URL tells a developer or agent that the agent-opaque-env PyPI distribution and
its load_env API understand the file.
It never contains a shell command, package-manager arguments, any other URL, environment values, or
other executable instructions. Verify the dependency against the project configuration before
installing anything named by an untrusted file.
Metadata bytes are authenticated as AES-GCM associated data. Unknown fields, non-canonical JSON, modified metadata, altered ciphertext, and unsupported formats are rejected.
API
dump_env(values, path=".env", *, profile="obfuscation", key=None, key_id=None)
load_env(path=".env", *, key=None) -> dict[str, str]
loads_env(data, *, key=None) -> dict[str, str]
generate_key() -> str
Only CPython 3.11 and newer are supported. New files use AOE1 exclusively; Pickle and older formats are intentionally unsupported.
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distributions
Built Distributions
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file agent_opaque_env-0.3.0-cp311-abi3-win_amd64.whl.
File metadata
- Download URL: agent_opaque_env-0.3.0-cp311-abi3-win_amd64.whl
- Upload date:
- Size: 803.6 kB
- Tags: CPython 3.11+, Windows x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
452a32373f08bf221996019f24a9e6ae6667dd70202a1fe6673ae93b3b073c56
|
|
| MD5 |
96b4dab22cd2317a30d95cc79b4617da
|
|
| BLAKE2b-256 |
64ae8e102657d3278f2b4d896f176c1ee6cdba1573094b952726e51c49c40344
|
File details
Details for the file agent_opaque_env-0.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl.
File metadata
- Download URL: agent_opaque_env-0.3.0-cp311-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl
- Upload date:
- Size: 884.5 kB
- Tags: CPython 3.11+, manylinux: glibc 2.17+ x86-64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
ef44cd1cd6d47d572f572ca204a2c2edc7382bb9037d52d2144b6079ec2c2526
|
|
| MD5 |
4b29a557830ac070e1e77f3193718e26
|
|
| BLAKE2b-256 |
319d1574eaa838ef93dc36606bcdf19f95d91d2edda50771d499a197ba84fe04
|
File details
Details for the file agent_opaque_env-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl.
File metadata
- Download URL: agent_opaque_env-0.3.0-cp311-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl
- Upload date:
- Size: 822.9 kB
- Tags: CPython 3.11+, manylinux: glibc 2.17+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
1101937c3cc0166888a04cd07c35fe81386e3c5af489820f70ed9e707adbdec8
|
|
| MD5 |
2365374345fb59953159c134c6e3e2b6
|
|
| BLAKE2b-256 |
182ca754b51a3e4743ac9e7d441c698e6a74176c75a00e3f0c0e9fc843263b56
|
File details
Details for the file agent_opaque_env-0.3.0-cp311-abi3-macosx_11_0_arm64.whl.
File metadata
- Download URL: agent_opaque_env-0.3.0-cp311-abi3-macosx_11_0_arm64.whl
- Upload date:
- Size: 766.6 kB
- Tags: CPython 3.11+, macOS 11.0+ ARM64
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.11.14
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
e85a6ebd3f5bb85ab15732c5874d3971aa9cf3d206d34c77ee2bad42000d482d
|
|
| MD5 |
564bdf8301861e902a27107227975c10
|
|
| BLAKE2b-256 |
eb0c37b8aa5dfbceb68a12cf56075ac75d28ec8bbb2510ec88da24bfff917938
|