Context
Why
Evalops has ~12 active TypeScript repos (console, admin, fabric, chat, hopper, explorer, maestro, maestro-internal, cadence, ensemble, conductor, lark, proto, mcp-openapi, shared-memory-mcp, deliberate-reasoning-engine, deep-code-reasoning-mcp, openclaw-safety-harness, diffscope-web-poc, cerebro-frontend). Each almost certainly has drifting ESLint/Prettier configs, divergent tsconfig.json defaults, and bespoke package.json scripts with no caching.
- gts unifies style + lint + format with one dependency. Opinionated, so arguments end.
- wireit caches script outputs by input hash; in a monorepo-adjacent setup (many repos sharing proto types) this saves minutes per CI run and per local
npm run build.
Plan
Out of scope
- Migrating to pnpm workspaces / Turborepo / Nx — that's a separate, larger conversation about whether the TS repos belong in a monorepo at all
Non-goals
- Forced migration. Repos that already have working lint/build stacks should migrate only when touched for other reasons.
Context
Why
Evalops has ~12 active TypeScript repos (console, admin, fabric, chat, hopper, explorer, maestro, maestro-internal, cadence, ensemble, conductor, lark, proto, mcp-openapi, shared-memory-mcp, deliberate-reasoning-engine, deep-code-reasoning-mcp, openclaw-safety-harness, diffscope-web-poc, cerebro-frontend). Each almost certainly has drifting ESLint/Prettier configs, divergent
tsconfig.jsondefaults, and bespokepackage.jsonscripts with no caching.npm run build.Plan
explorer— small, active, no heavy custom lint rules). Document the diff.@evalops/ts-configpackage that re-exports gts presets with evalops-specific overrides.githuborg templates so new TS repos inherit themOut of scope
Non-goals