# Copy to .env and fill in. .env is gitignored and never committed. # Note: values in .env never override variables already exported in your shell # (e.g. from ~/.bashrc). Unset a stale export, or the shell value wins. # LLM calls (verify, roles, the decision engine): DeepSeek. DEEPSEEK_API_KEY= # DEEPSEEK_BASE_URL=https://api.deepseek.com # Embeddings only (`ousast learn memory embed`, default openai/text-embedding-3-small through OpenRouter). OPENROUTER_API_KEY= # Plane memory store. Default is a local FileStore under ~/ousast-results/plane/memory. # For an S3-compatible server (RustFS is the tested one): OUSAST_MEMORY=s3://[/], or # OUSAST_MEMORY=s3:// to use S3_BUCKET. Needs the s3 extra (boto3). Example for a RustFS server: # OUSAST_MEMORY=s3://sast-memory # S3_ENDPOINT=https://files.example.com # S3_REGION=us-east-1 # S3_BUCKET=sast-memory # AWS_ACCESS_KEY_ID= # AWS_SECRET_ACCESS_KEY= # AWS_SESSION_TOKEN= # The bucket must have versioning enabled, a lifecycle rule expiring runs/, S3 Select and readable object tags # (see docs/rustfs.md); the store verifies them at startup and refuses to run otherwise. # Operator notifications (Discord). Status of OpenUltraSAST processes and their results for the # system/AI operator -- not developer debugging, and not k3s/ax infra health. See # .kiro/steering/operator-notifications.md. Webhook posts to the operator channel; the operator id # is the account to @mention on a stuck/impaired alert. Leave blank to disable notifications. DISCORD_WEBHOOK_URL= DISCORD_OPERATOR_ID=