# AGENTS.md Guidance for AI agents and contributors working in this repo. Read `README.md` for commands and layout. ## How to work with tasks Use the file `todo.md`. For each todo item, interview the user extensively to deeply understand the scope and goal of each. When done, run the stability reviewer agent in a loop and address all feedback until there is none. If you are not very confident of how to address it, ask the user. Check the completed task in this file. Commit all changes and push to a new branch, create a PR and merge it when the CI/CD turns green. ## Project priorities (do not erode) 1. **Simplicity** — prefer the solution that is easiest to understand, smallest, and most readable. 2. **Few dependencies** — runtime deps stay minimal (today `ejs`, `lucide-static`, `@larvit/log` — the last itself zero-dependency, for structured/OTLP logging). Prefer the Node standard library; justify any new dependency; do not add frameworks. The app is **stateless — no database**. Auth/identity/OAuth are **Ory sidecar services** (Kratos/Keto/Hydra, backed by Postgres), reached over their REST APIs with built-in `fetch` — no SDK dependency. New capabilities ship as **plugin folders** under `plugins/` that fetch their data from upstream services, not as core code. See `README.md` for the architecture. 3. **Strict TypeScript** — `tsconfig.json` is strict (incl. `noUncheckedIndexedAccess`, `exactOptionalPropertyTypes`, `verbatimModuleSyntax`). Keep it that way. Prefer exact types and limit nullable and multi option types when possible. KISS. 4. **Environment-agnostic** — the app never asks *which environment* it runs in; there is no `NODE_ENV` (or equivalent) branching. Every behaviour is an **explicit config toggle** (e.g. `CACHE_TEMPLATES`, `REQUIRE_SECURE_SECRETS`, a future "disable email"), read once in `src/config.ts`. Compose files set the toggles per deployment. 5. **Semantic, accessible DOM** — markup is a first-class concern. Use the right element for the job (landmarks, one `

` per page + sane heading order, lists, `` with row/column headers, `
`/``, `