-
Notifications
You must be signed in to change notification settings - Fork 2
Expand file tree
/
Copy path.env.example
More file actions
545 lines (533 loc) · 34.7 KB
/
Copy path.env.example
File metadata and controls
545 lines (533 loc) · 34.7 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
# LemmaComputer deployment environment
#
# Generated from scripts/deployment-config.mjs. Do not edit this file by hand.
# Run `npm run env:init` to create .env with fresh local secrets, then
# replace deployment-specific placeholders. Never commit .env.
#
# Scope: every operator-owned input accepted in a deployment .env is listed
# exactly once below. Service-local and per-workspace variables are derived
# into .runtime-env/ files or runtime container specifications.
# Qualification-only inputs are documented in .env.qualification.example.
# Model-provider API keys and tenant MCP OAuth tokens are configured in the
# product UI and encrypted stores; they are intentionally not deployment env vars.
# Run `npm run env:check` to validate the selected profile and conditional fields.
# Deployment profile and local topology
# Set the profile explicitly for every deployment. Worktree values are replaced by npm run worktree:init.
# Deployment profile: customer-managed, hosted, or worktree.
# Accepted values: customer-managed, hosted, worktree.
LEMMACOMPUTER_INSTALLATION_KIND=customer-managed
# Compose project name. Keep this unique for each local worktree.
LEMMACOMPUTER_COMPOSE_PROJECT_NAME=lemmacomputer
# Control runtime image reference. Production runtime requires a repository digest reference.
LEMMACOMPUTER_CONTROL_RUNTIME_IMAGE=lemmacomputer/control-runtime:dev
# OpenVTC consent image reference. Production runtime requires a repository digest reference.
LEMMACOMPUTER_OPENVTC_CONSENT_IMAGE=lemmacomputer/openvtc-consent:dev
# Version recorded with schema and operational events.
LEMMACOMPUTER_APP_VERSION=dev
# Microsoft 365 MCP image reference. Production runtime requires a repository digest reference.
LEMMACOMPUTER_MS365_MCP_IMAGE=lemmacomputer/ms365-mcp:0.131.2
# Private Docker network name used by local Kasm workspaces.
LEMMACOMPUTER_CONTROL_NETWORK=lemmacomputer-control
# Control API container name used by the local Kasm adapter.
LEMMACOMPUTER_CONTROL_CONTAINER=lemmacomputer-control-api
# LiteLLM container name used by the local Kasm adapter.
LEMMACOMPUTER_LITELLM_CONTAINER=lemmacomputer-litellm
# Address used for reference-stack published ports.
LEMMACOMPUTER_HTTP_BIND_ADDRESS=127.0.0.1
# Public endpoints
# Use externally reachable HTTPS URLs in production. The reference stack binds loopback ports by default.
# Published LemmaComputer Web and workspace-ingress port.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_WEB_PORT=4174
# Public Web and workspace ingress base URL.
# Required when: The hosted profile is selected; it must use HTTPS.
# Accepted value: an absolute URL.
LEMMACOMPUTER_PUBLIC_WEB_URL=http://localhost:4174
# LiteLLM administration mutual TLS
# Hosted deployments must set an HTTPS admin URL and inject every certificate value from the deployment secret manager.
# Control-to-LiteLLM administration listener URL.
# Required when: The hosted profile is selected; it must use HTTPS.
# Accepted value: an absolute URL.
LEMMACOMPUTER_LITELLM_ADMIN_URL=http://litellm-admin-listener:8443
# Base64 PEM certificate authority for the private admin listener.
# Required when: The hosted profile is selected.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_LITELLM_ADMIN_TLS_CA_B64=
# Base64 PEM server certificate for the private admin listener.
# Required when: The hosted profile is selected.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_LITELLM_ADMIN_TLS_SERVER_CERT_B64=
# Base64 PEM server private key for the private admin listener.
# Required when: The hosted profile is selected.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_LITELLM_ADMIN_TLS_SERVER_KEY_B64=
# Base64 PEM Control client certificate for the private admin listener.
# Required when: The hosted profile is selected.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_LITELLM_ADMIN_TLS_CLIENT_CERT_B64=
# Base64 PEM Control client private key for the private admin listener.
# Required when: The hosted profile is selected.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_LITELLM_ADMIN_TLS_CLIENT_KEY_B64=
# Expected TLS server name for Control's private admin client.
LEMMACOMPUTER_LITELLM_ADMIN_TLS_SERVER_NAME=litellm-admin-listener
# Required Control client certificate common name at the private admin listener.
LEMMACOMPUTER_LITELLM_ADMIN_CLIENT_COMMON_NAME=lemmacomputer-control
# Custom MCP egress
# Hosted custom MCP destinations are approved by the deployment and network owner, not by a tenant-local administrator.
# Comma-separated exact HTTPS origins for hosted custom MCP and OAuth flows, including endpoint, metadata, authorization, token, and dynamic-client-registration origins. Customer-managed installations must leave this empty.
# Required when: A hosted deployment permits custom MCP or OAuth destinations.
LEMMACOMPUTER_HOSTED_MCP_EGRESS_ORIGINS=
# Runtime limits and security switches
# These are deployment controls, not Compose defaults. Keep the secure hosted Telegram setting explicit.
# Runtime safety mode: development or production.
# Accepted values: development, production.
LEMMACOMPUTER_RUNTIME_ENVIRONMENT=development
# Comma-separated reverse-proxy IP addresses or CIDRs trusted by customer authentication.
# Required when: The hosted profile is selected.
LEMMACOMPUTER_AUTH_TRUSTED_PROXY_CIDRS=
# Signed workspace-launch token lifetime in seconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_WORKSPACE_INGRESS_LAUNCH_TTL_SECONDS=300
# Workspace ingress session lifetime in seconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_WORKSPACE_INGRESS_SESSION_TTL_SECONDS=28800
# Whether workspace ingress verifies TLS for its configured internal upstreams.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote; set it to true.
# Accepted values: true or false.
LEMMACOMPUTER_WORKSPACE_INGRESS_VERIFY_UPSTREAM_TLS=false
# Agent bridge grant lifetime in seconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_AGENT_BRIDGE_GRANT_TTL_SECONDS=900
# Gateway grant renewal interval in seconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_GATEWAY_GRANT_RENEWAL_INTERVAL_SECONDS=900
# Channel broker polling interval in milliseconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_CHANNEL_POLL_INTERVAL_MS=1000
# Telegram composition batching window in milliseconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_TELEGRAM_COMPOSITION_WINDOW_MS=1500
# Controls whether administrators may submit raw Telegram bot tokens; empty uses the profile default.
# Required when: The hosted profile is selected; set it to reject.
# Accepted values: (empty), legacy, reject.
LEMMACOMPUTER_TELEGRAM_RAW_TOKEN_INPUT_MODE=
# Telegram broker token-intake grant lifetime in seconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_TELEGRAM_INTAKE_GRANT_TTL_SECONDS=300
# Attachment retention period in days.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_CHAT_ATTACHMENT_RETENTION_DAYS=90
# Scheduler worker polling interval in milliseconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_SCHEDULER_POLL_INTERVAL_MS=5000
# Maximum schedules claimed by one polling pass.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_SCHEDULER_CLAIM_LIMIT=10
# Schedule claim lease duration in milliseconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_SCHEDULER_CLAIM_LEASE_MS=120000
# Signed policy bundle lifetime in seconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_POLICY_BUNDLE_TTL_SECONDS=86400
# Durable chat artifact storage
# PostgreSQL owns chat metadata. Artifact bytes use a Control-owned filesystem locally and an encrypted S3-compatible bucket in hosted deployments.
# Artifact byte-store backend: filesystem or s3.
# Accepted values: filesystem, s3.
LEMMACOMPUTER_ARTIFACT_STORE_BACKEND=filesystem
# Absolute Control-owned artifact root used by the filesystem backend.
LEMMACOMPUTER_ARTIFACT_FILESYSTEM_ROOT=/var/lib/lemmacomputer/artifacts
# Dedicated artifact bucket name.
# Required when: The s3 backend is selected.
LEMMACOMPUTER_ARTIFACT_S3_BUCKET=
# Artifact bucket AWS region.
# Required when: The s3 backend is selected.
LEMMACOMPUTER_ARTIFACT_S3_REGION=
# Optional S3-compatible endpoint used by local qualification only.
# Accepted value: an absolute URL.
LEMMACOMPUTER_ARTIFACT_S3_ENDPOINT=
# Use path-style S3 addressing for local S3-compatible qualification.
# Accepted values: true or false.
LEMMACOMPUTER_ARTIFACT_S3_FORCE_PATH_STYLE=false
# Optional KMS key ID for SSE-KMS artifact encryption; when blank, S3 writes use SSE-S3 (AES256).
LEMMACOMPUTER_ARTIFACT_S3_KMS_KEY_ID=
# Generated service, encryption, and internal-authentication secrets
# npm run env:init replaces every generated-by-env-init value with a distinct local secret. Production secrets belong in a secret manager.
# Web-to-Control proxy bearer token.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_WEB_PROXY_TOKEN=generated-by-env-init
# Control-to-workspace-controller bearer token.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_CONTROLLER_TOKEN=generated-by-env-init
# LemmaComputer PostgreSQL password.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_POSTGRES_PASSWORD=generated-by-env-init
# LiteLLM master key.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_LITELLM_MASTER_KEY=generated-by-env-init
# LiteLLM credential-encryption salt.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_LITELLM_SALT_KEY=generated-by-env-init
# LiteLLM credential encryption secret. It must remain distinct from session and ingress secrets.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_LITELLM_CREDENTIAL_SECRET=generated-by-env-init
# LiteLLM PostgreSQL password.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_LITELLM_POSTGRES_PASSWORD=generated-by-env-init
# Fixture-only approval secret for local qualification flows.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_FIXTURE_APPROVAL_SECRET=generated-by-env-init
# Current Better Auth encryption and signing key version.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_BETTER_AUTH_SECRET_VERSION=1
# Current Better Auth encryption and signing secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_BETTER_AUTH_SECRET=generated-by-env-init
# Older version:secret Better Auth keys, newest first, retained only for bounded rotation decryption.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_BETTER_AUTH_PREVIOUS_SECRETS=
# Least-privilege Better Auth runtime database password.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_AUTH_POSTGRES_RUNTIME_PASSWORD=generated-by-env-init
# Better Auth schema migration database password.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_AUTH_POSTGRES_MIGRATOR_PASSWORD=generated-by-env-init
# Current platform-operator Better Auth encryption and signing key version.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_PLATFORM_BETTER_AUTH_SECRET_VERSION=1
# Platform-operator Better Auth secret, isolated from customer authentication.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_PLATFORM_BETTER_AUTH_SECRET=generated-by-env-init
# Older version:secret platform-operator Better Auth keys retained only for bounded rotation decryption.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_PLATFORM_BETTER_AUTH_PREVIOUS_SECRETS=
# Least-privilege platform-operator authentication runtime database password.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_PLATFORM_AUTH_POSTGRES_RUNTIME_PASSWORD=generated-by-env-init
# Platform-operator authentication schema migration database password.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_PLATFORM_AUTH_POSTGRES_MIGRATOR_PASSWORD=generated-by-env-init
# One-time platform-operator enrollment secret. Store it in deployment secret custody for first enrollment, then remove it after the passkey is enrolled.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_PLATFORM_AUTH_BOOTSTRAP_SECRET=generated-by-env-init
# Workspace ingress signing secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_WORKSPACE_INGRESS_SECRET=generated-by-env-init
# Egress grant derivation secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_EGRESS_GRANT_SECRET=generated-by-env-init
# LiteLLM credential for the static model-provider egress proxy.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_GATEWAY_EGRESS_PROXY_TOKEN=generated-by-env-init
# LiteLLM credential for the strict remote-MCP egress proxy.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_REMOTE_MCP_EGRESS_PROXY_TOKEN=generated-by-env-init
# Remote MCP proxy credential for its narrow Control authorization callback.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_MCP_EGRESS_PROXY_TOKEN=generated-by-env-init
# Dedicated agent bridge signing secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_AGENT_BRIDGE_SECRET=generated-by-env-init
# Signing secret for connector administrator-consent links.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_CONNECTOR_CONSENT_SECRET=generated-by-env-init
# Agent chat internal authentication secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_HERMES_API_SECRET=generated-by-env-init
# Channel broker credential-vault encryption secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_CHANNEL_CREDENTIAL_SECRET=generated-by-env-init
# Control-to-channel-broker bearer token.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_CHANNEL_BROKER_TOKEN=generated-by-env-init
# Scheduler prompt signing secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_SCHEDULE_PROMPT_SECRET=generated-by-env-init
# Scheduler-to-Control bearer token.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_SCHEDULER_TOKEN=generated-by-env-init
# LiteLLM-to-Control usage bearer token.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_AI_USAGE_TOKEN=generated-by-env-init
# AI usage task-binding secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_AI_USAGE_TASK_BINDING_SECRET=generated-by-env-init
# OpenVTC, Web Push, policy, and Telegram key material
# Generated key pairs are coupled. Do not replace only one member of a group.
# Base64 OpenVTC executor seed.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_OPENVTC_EXECUTOR_SEED_B64=generated-by-env-init
# OpenVTC consent service bearer token.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_OPENVTC_CONSENT_TOKEN=generated-by-env-init
# Web Push VAPID subject.
LEMMACOMPUTER_WEB_PUSH_VAPID_SUBJECT=mailto:security@example.com
# Web Push VAPID public key.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_WEB_PUSH_VAPID_PUBLIC_KEY=generated-by-env-init
# Web Push VAPID private key.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_WEB_PUSH_VAPID_PRIVATE_KEY=generated-by-env-init
# Web Push subscription encryption secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_WEB_PUSH_SUBSCRIPTION_SECRET=generated-by-env-init
# Active signed-policy key identifier.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_POLICY_SIGNING_KEY_ID=generated-by-env-init
# Base64 DER signed-policy private key.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_POLICY_SIGNING_PRIVATE_KEY_B64=generated-by-env-init
# Base64 signed-policy verification key set.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_POLICY_VERIFICATION_KEYS_B64=generated-by-env-init
# Base64 DER broker-only Telegram intake grant private key.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_TELEGRAM_INTAKE_GRANT_PRIVATE_KEY_B64=generated-by-env-init
# Base64 DER Telegram intake grant public key.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_TELEGRAM_INTAKE_GRANT_PUBLIC_KEY_B64=generated-by-env-init
# Base64 DER broker-only Telegram token-envelope private key.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_TELEGRAM_INTAKE_ENCRYPTION_PRIVATE_KEY_B64=generated-by-env-init
# Base64 DER Telegram token-envelope public key.
# Local initialization: npm run env:init replaces this placeholder and keeps the generated value stable in .env.
LEMMACOMPUTER_TELEGRAM_INTAKE_ENCRYPTION_PUBLIC_KEY_B64=generated-by-env-init
# Customer authentication and transactional email
# Email/password is universal. Social providers are optional pairs; production email uses Postmark.
# Authentication email transport: capture for non-production tests or postmark for real delivery.
# Required when: LEMMACOMPUTER_RUNTIME_ENVIRONMENT=production; set it to postmark.
# Accepted values: capture, postmark.
LEMMACOMPUTER_AUTH_EMAIL_TRANSPORT=capture
# Organization invitation delivery: email, or explicit copy-link for local/customer-managed operation.
# Required when: The hosted profile is selected; set it to email.
# Accepted values: email, copy-link.
LEMMACOMPUTER_INVITATION_DELIVERY_MODE=copy-link
# Postmark server token for authentication and invitation email.
# Required when: LEMMACOMPUTER_AUTH_EMAIL_TRANSPORT=postmark.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_POSTMARK_SERVER_TOKEN=
# Verified Postmark sender address used for authentication and invitation email.
# Required when: LEMMACOMPUTER_AUTH_EMAIL_TRANSPORT=postmark.
LEMMACOMPUTER_POSTMARK_FROM=
# Postmark transactional message stream ID.
LEMMACOMPUTER_POSTMARK_MESSAGE_STREAM=outbound
# Google OAuth client ID for optional customer sign-in.
# Required when: Google customer sign-in is enabled; configure it with the matching secret.
LEMMACOMPUTER_GOOGLE_AUTH_CLIENT_ID=
# Google OAuth client secret for optional customer sign-in.
# Required when: Google customer sign-in is enabled; configure it with the matching client ID.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_GOOGLE_AUTH_CLIENT_SECRET=
# Microsoft OAuth client ID for optional customer sign-in.
# Required when: Microsoft customer sign-in is enabled; configure it with the matching secret.
LEMMACOMPUTER_MICROSOFT_AUTH_CLIENT_ID=
# Microsoft OAuth client secret for optional customer sign-in.
# Required when: Microsoft customer sign-in is enabled; configure it with the matching client ID.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_MICROSOFT_AUTH_CLIENT_SECRET=
# Microsoft customer-login tenant selector; common permits personal and organizational accounts.
LEMMACOMPUTER_MICROSOFT_AUTH_TENANT_ID=common
# Comma-separated exact HTTPS IdP origins allowed for tenant OIDC discovery; wildcards are rejected.
# Required when: Tenant-managed OIDC SSO discovery is enabled.
LEMMACOMPUTER_CUSTOMER_SSO_TRUSTED_IDP_ORIGINS=
# Platform operations, Microsoft 365, and bootstrap
# Customer and platform authentication use isolated Better Auth realms. Microsoft 365 uses a dedicated connector application when configured.
# Exact email address for the first hosted platform administrator.
# Required when: The hosted profile is selected.
LEMMACOMPUTER_PLATFORM_AUTH_BOOTSTRAP_EMAIL=
# Display name for the first platform administrator.
LEMMACOMPUTER_PLATFORM_AUTH_BOOTSTRAP_DISPLAY_NAME=Platform administrator
# Hosted HTTPS destination for signed break-glass security alerts.
# Required when: The hosted profile is selected.
LEMMACOMPUTER_PLATFORM_SECURITY_ALERT_WEBHOOK_URL=
# Shared HMAC secret for signed break-glass security alerts.
# Required when: The hosted profile is selected.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_PLATFORM_SECURITY_ALERT_WEBHOOK_SECRET=
# Require approval for every tenant-support elevation in addition to always-sensitive scopes.
# Accepted values: true or false.
LEMMACOMPUTER_PLATFORM_SUPPORT_APPROVAL_REQUIRED=true
# Dedicated Microsoft 365 MCP Entra tenant ID.
LEMMACOMPUTER_MS365_TENANT_ID=
# Dedicated Microsoft 365 MCP Entra client ID.
LEMMACOMPUTER_MS365_CLIENT_ID=
# Dedicated Microsoft 365 MCP Entra client secret.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_MS365_CLIENT_SECRET=
# Dedicated Google Workspace MCP OAuth client ID for Gmail, Drive, and Calendar.
# Required when: The Google Workspace MCP connectors are enabled; configure it with the matching secret and the LiteLLM OAuth callback.
LEMMACOMPUTER_GOOGLE_WORKSPACE_MCP_CLIENT_ID=
# Dedicated Google Workspace MCP OAuth client secret for Gmail, Drive, and Calendar.
# Required when: The Google Workspace MCP connectors are enabled; configure it with the matching client ID and the LiteLLM OAuth callback.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_GOOGLE_WORKSPACE_MCP_CLIENT_SECRET=
# GitHub MCP OAuth app client ID.
# Required when: The GitHub MCP connector is enabled; configure it with the matching secret.
LEMMACOMPUTER_GITHUB_MCP_CLIENT_ID=
# GitHub MCP OAuth app client secret.
# Required when: The GitHub MCP connector is enabled; configure it with the matching client ID.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_GITHUB_MCP_CLIENT_SECRET=
# Initial owned tenant identifier.
LEMMACOMPUTER_BOOTSTRAP_TENANT_ID=example
# Microsoft 365 MCP safety limits
# These vendor settings are explicit deployment inputs so every target receives the same safety policy.
# Maximum items per Microsoft Graph request.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_MS365_MAX_TOP=25
# Maximum Microsoft Graph pages per request.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_MS365_MAX_PAGES=4
# Maximum aggregate Microsoft Graph items per request.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_MS365_MAX_ITEMS=100
# Whether Microsoft 365 MCP redacts personally identifiable information.
# Accepted values: true or false.
LEMMACOMPUTER_MS365_REDACT_PII=true
# Whether Microsoft 365 MCP requires confirmation for mutations.
# Accepted values: true or false.
LEMMACOMPUTER_MS365_REQUIRE_CONFIRM=true
# Trusted proxy hops for Microsoft 365 MCP.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_MS365_TRUST_PROXY_HOPS=0
# Microsoft 365 MCP log level.
LEMMACOMPUTER_MS365_LOG_LEVEL=info
# Workspace runtime and node topology
# One Lemma-owned Docker/KasmVNC runtime runs on a colocated or private remote workspace node. Runtime selection never grants Docker authority to Control.
# Workspace runtime implementation.
# Accepted values: docker-kasmvnc.
LEMMACOMPUTER_WORKSPACE_RUNTIME=docker-kasmvnc
# Workspace-node placement: colocated or remote.
# Accepted values: colocated, remote.
LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=colocated
# Private Control-to-workspace-node URL.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote; it must use HTTPS.
# Accepted value: an absolute URL.
LEMMACOMPUTER_WORKSPACE_NODE_URL=http://workspace-controller:4101
# Stable audit identifier for the configured workspace node.
LEMMACOMPUTER_WORKSPACE_NODE_ID=workspace-node-1
# Node request authentication: token for colocated development or mutual TLS for remote nodes.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote; set it to mtls.
# Accepted values: token, mtls.
LEMMACOMPUTER_WORKSPACE_NODE_AUTH_MODE=token
# Base64 PEM CA for the remote node and private desktop relay.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_TLS_CA_B64=
# Base64 PEM workspace-node server certificate.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_TLS_SERVER_CERT_B64=
# Base64 PEM workspace-node server private key.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_TLS_SERVER_KEY_B64=
# Base64 PEM Control workload client certificate.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_TLS_CLIENT_CERT_B64=
# Base64 PEM Control workload client private key.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_TLS_CLIENT_KEY_B64=
# Expected TLS server name for Control's node client.
LEMMACOMPUTER_WORKSPACE_NODE_TLS_SERVER_NAME=workspace-node
# Required Control client-certificate common name.
LEMMACOMPUTER_WORKSPACE_NODE_CLIENT_COMMON_NAME=lemmacomputer-control
# Base64 PEM workspace-ingress client certificate for private desktop relays.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_INGRESS_TLS_CLIENT_CERT_B64=
# Base64 PEM workspace-ingress client private key for private desktop relays.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_INGRESS_TLS_CLIENT_KEY_B64=
# Required workspace-ingress client-certificate common name.
LEMMACOMPUTER_WORKSPACE_INGRESS_TLS_CLIENT_COMMON_NAME=lemmacomputer-workspace-ingress
# Private relay DNS name or address returned only to workspace ingress.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
LEMMACOMPUTER_WORKSPACE_NODE_PRIVATE_HOST=127.0.0.1
# Private node interface used for desktop relay port bindings.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
LEMMACOMPUTER_WORKSPACE_RELAY_BIND_HOST=127.0.0.1
# Pre-created private node network used by TLS desktop relays for ingress port publication.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
LEMMACOMPUTER_WORKSPACE_NODE_RELAY_NETWORK=
# Pre-created restricted node network used only by fixed Control and gateway relays.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
LEMMACOMPUTER_WORKSPACE_NODE_APPLICATION_NETWORK=
# Base64 PEM CA for private Control and gateway relay upstreams.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_APPLICATION_TLS_CA_B64=
# Base64 PEM workspace-node application-gateway client certificate.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_APPLICATION_TLS_CLIENT_CERT_B64=
# Base64 PEM workspace-node application-gateway client private key.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Sensitive: keep this value out of source control and logs; use a secret manager in production.
LEMMACOMPUTER_WORKSPACE_NODE_APPLICATION_TLS_CLIENT_KEY_B64=
# Private HTTPS gateway endpoint reachable only from the remote node application network.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Accepted value: an absolute URL.
LEMMACOMPUTER_WORKSPACE_NODE_GATEWAY_URL=
# Private HTTPS Control endpoint reachable only from the remote node application network.
# Required when: LEMMACOMPUTER_WORKSPACE_NODE_TOPOLOGY=remote.
# Accepted value: an absolute URL.
LEMMACOMPUTER_WORKSPACE_NODE_CONTROL_URL=
# Workspace container image reference. Production runtime requires a repository digest reference.
LEMMACOMPUTER_WORKSPACE_IMAGE=lemmacomputer/workspace:dev
# Trusted IANA timezone for workspace and relative calendar times.
LEMMACOMPUTER_TIME_ZONE=Etc/UTC
# Local Kasm workspace network-name prefix.
LEMMACOMPUTER_KASM_LOCAL_NETWORK_PREFIX=lemmacomputer-workspace
# Local Kasm egress network name.
LEMMACOMPUTER_KASM_LOCAL_EGRESS_NETWORK=lemmacomputer-egress
# Expose KVM devices only to supported local desktop workspaces.
# Required when: Claude Cowork must run; the workspace node must provide /dev/kvm and /dev/vhost-vsock.
# Accepted values: true or false.
LEMMACOMPUTER_KASM_LOCAL_KVM_ENABLED=false
# Apply the root-owned AppArmor profile and pinned user-namespace seccomp rules to workspaces that select Chrome, Visual Studio Code, or Obsidian.
# Required when: A workspace may select Chrome, Visual Studio Code, or Obsidian on an AppArmor-enforcing node.
# Accepted values: true or false.
LEMMACOMPUTER_KASM_LOCAL_ELECTRON_SANDBOX_ENABLED=false
# Local workspace startup timeout in milliseconds.
# Accepted value: a non-negative integer.
LEMMACOMPUTER_KASM_LOCAL_STARTUP_TIMEOUT_MS=60000