.agents/skills/env-configuration/SKILL.md
Adding or reading env vars, updating .env.example, or validating config at startup with parseEnv / parseEnvOptional.
npx skillsauth add latitude-dev/latitude-llm env-configurationInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
When to use: Adding or reading env vars, updating .env.example, or validating config at startup with parseEnv / parseEnvOptional.
LAT_ prefix conventionAll application environment variables must be prefixed with LAT_ so they do not collide with third-party services, Docker, or common names.
Use LAT_ for:
LAT_DATABASE_URL, LAT_PG_POOL_MAX, …)CLICKHOUSE_URL, LAT_REDIS_HOST, …)LAT_API_PORT, LAT_WEB_PORT, LAT_INGEST_PORT)LAT_BETTER_AUTH_SECRET, LAT_MAILPIT_HOST, …)Do not use LAT_ for:
NODE_ENVPOSTGRES_USER, CLICKHOUSE_USER, …)VITE_LAT_* (Vite requires the VITE_ prefix)Reference: .env.example lists Docker “Services” vs “Latitude Application” (LAT_*) variables.
.env.example maintenanceEvery new variable must appear in .env.example:
LAT_API_PORT=3001)# LAT_STRIPE_SECRET_KEY=sk_test_xxx)Always use parseEnv or parseEnvOptional from @platform/env — never process.env.FOO ad hoc or unprefixed names for app config.
// ❌ Bad - unprefixed or direct access
const port = Number(process.env.PORT)
// ✅ Good - pass the variable name string (parseEnv reads process.env internally)
import { parseEnv, parseEnvOptional } from "@platform/env"
import { Effect } from "effect"
const port = Effect.runSync(parseEnv("LAT_API_PORT", "number", 3001))
const dbUrl = Effect.runSync(parseEnv("LAT_DATABASE_URL", "string"))
For where configuration is wired in apps (clients, routes), see architecture-boundaries.
data-ai
Continuous Agentation annotation handling. Use when the user says "watch mode", asks you to watch for Agentation annotations, process feedback as it arrives, or keep fixing annotation-driven changes until told to stop or a timeout is reached.
development
apps/web UI — routes, @repo/ui, TanStack Start server functions and collections, forms, Tailwind layout rules, design-system updates, and useEffect / useMountEffect policy.
tools
Installing dependencies, running dev/build/test/lint, filtering packages, single-test runs, git hooks, preparing a clone (.env.development / .env.test), or Docker-backed local services and dev servers.
tools
Writing or debugging tests, choosing unit vs integration style, Postgres/ClickHouse tests, regenerating ClickHouse test schema, or exporting test helpers from packages without pulling test code into production bundles.