Day-to-day dev commands for Opsiforce — type-check, lint, database, local ports. For first-time setup and the run loop, the Quickstart (
yarn dev) is canonical.
Setup and the run loop are one command — yarn dev (the Quickstart). This page covers the commands you run while developing, once the stack is up.
Opsiforce TS/JS uses the Rust-based OXC toolchain — oxlint + oxfmt, not ESLint/Prettier. Config lives at .oxlintrc.json (shared base, extended per package) and .oxfmtrc.json. Run per workspace (swap @opsiforce/backend for @opsiforce/frontend):
yarn workspace @opsiforce/backend run ts # tsc type-check
yarn workspace @opsiforce/backend run lint # one pass: applies safe autofixes, errors fail, warnings advisory
yarn workspace @opsiforce/backend run format # oxfmt rewrite (append --check for a CI dry run)
yarn workspace @opsiforce/backend run check # lint && ts — the pre-commit gatelint is a single stack-tuned pass: the backend runs type-aware rules (oxlint-tsgolint) plus the node/import/promise plugins; the frontend runs jsx-a11y plus Solid and solid-query rules via oxlint jsPlugins (auto-discovered from frontend/oxlint.config.ts). The vendored frontend/opencode/ tree is excluded.
yarn workspace @opsiforce/backend run db:generate --name <meaningful-name> # migration from schema changes
yarn workspace @opsiforce/backend run db:migrate # apply migrations
yarn workspace @opsiforce/backend run db:studio # Drizzle Studio (localhost:4983)Always give db:generate a meaningful --name describing the change (add-session-id-to-projects, not update). Generic names make migration history unreadable.
With the Tilt port-forward up, the backend answers on localhost:3010, e.g. curl http://localhost:3010/api/health or /api/projects.
| Service | URL / Port |
|---|---|
| Opsiforce app (via Traefik) | https://opsiforce.localtest.me |
| App / VS Code / DB per project | https://{env}.{apps,code,db}.opsiforce.localtest.me |
| Bifrost dashboard · Tilt UI | https://{bifrost,tilt}.opsiforce.localtest.me |
| Backend (Tilt port-forward) · Node debug | localhost:3010 · :9229 |
| Frontend (Vite HMR) | localhost:8084 |
| PostgreSQL · Redis · Keycloak | localhost:5435 · 6382 · 8086 |
| Drizzle Studio · Mailgun mock | localhost:4983 · 8089 |
backend/local-envs.shandfrontend/local-envs.shhold local bootstrap vars (backend/Bifrost; app/preview/VS Code/DB domains).OPENAI_API_KEY/ANTHROPIC_API_KEYare optional locally; omitted, Bifrost provider secrets are created empty (calls to those providers won't work until real keys are supplied).- Local dev builds the agent image into minikube (
AGENT_CONTAINER_IMAGE_PULL_POLICY=Never); prod usesAlways.
../README.md— prerequisites and the run loop.- Deployment — CI/CD and the cluster rollout.