# Design: Load Local Env File ## Overview The app should support the common local workflow: 1. Copy `.env.example` to `.env`. 2. Fill in local endpoints and keys. 3. Start the app without additional shell exports. Use `python-dotenv` because it is small, conventional, and avoids custom parsing. Call `load_dotenv()` at import time before constants such as `MINICPM_VISION_BASE_URL`, `KLEIN_MODAL_ENDPOINT`, and `LLAMA_CPP_BASE_URL` are read. ## Startup Flow In `app.py`: - import `load_dotenv` near other third-party imports - call `load_dotenv()` before configuration constants are assigned - keep existing `os.getenv(...)` calls unchanged after that point `python-dotenv` does not override already-set process environment variables by default, which is the desired precedence. ## Dependency Add `python-dotenv` to `requirements.txt`. Pinning is not required unless the repository already pins direct dependencies strictly. ## Documentation Update local setup docs to say: - `.env.example` is a template - `.env` is ignored by git - `.env` is loaded automatically by the app - process environment values still override `.env` Avoid showing real API keys or suggesting that users commit `.env`. ## Verification Extend `scripts/verify.py` to check: - `requirements.txt` includes `python-dotenv` - `app.py` imports and calls `load_dotenv()` - the call appears before core env constants are read - `.env.example` still exists and remains free of real-looking secrets The verifier should not require a real `.env` file.