project-standards is a pnpm monorepo for managing repository standards in one place.
It keeps the real configuration sources and the applying CLI together so that new and existing repositories can adopt the same baseline with a small, reviewable diff.
This repository is designed around three responsibilities:
- shared configuration packages for tools that should be referenced instead of copied
- repository templates for files that must exist inside each target repository
- a Node.js CLI that can plan, diff, and apply those files safely
The current MVP focuses on a small base preset with:
- Renovate baseline config
- shared ESLint flat config with Stylistic rules
- Oxlint and Oxfmt starter files
AGENTS.md,CLAUDE.md, Cursor rules, and Cursor commands
- support both new repositories and existing repositories
- stay idempotent wherever possible
- make
diffand--dry-runthe default review path - avoid clobbering repository-specific files by default
- keep preset and template expansion easy for future stacks
The initial implementation uses two file strategies:
create_if_missing: create a file only when it does not already existreplace_if_managed: replace a file only when it contains the managed marker
This keeps existing repositories safe while still allowing standards-managed files to be upgraded later.
.
├── packages
│ ├── cli
│ ├── core
│ ├── eslint-config
│ └── renovate-config
├── templates
│ └── base
├── package.json
├── pnpm-workspace.yaml
├── tsconfig.base.json
└── tsconfig.json
Shared planner primitives:
- preset manifest loading
- file strategy evaluation
- diff rendering
- dry-run friendly apply flow
The first CLI entrypoint. Current commands:
initapplydiffdoctor(stub)upgrade(stub)
Shared ESLint flat config package for repositories that want a common lint baseline.
Shared Renovate config source for the base preset.
templates/base is the first preset manifest plus concrete files to apply into target repositories.
Current managed targets include:
renovate.jsoneslint.config.mjs.oxlintrc.json.oxfmtrc.jsonAGENTS.mdCLAUDE.md.cursor/rules/repository-standards.mdc.cursor/commands/quality-check.md
Current template notes for the MVP:
eslint.config.mjsassumes the target repository also installs@jabelic/eslint-configAGENTS.mdandCLAUDE.mdare managed base stubs; stack-specific composition is reserved for later
Install dependencies and build the workspace:
pnpm install
pnpm buildShow help:
node packages/cli/dist/index.js --helpPreview a repository diff:
node packages/cli/dist/index.js diff ../target-repositoryApply only quality-related files:
node packages/cli/dist/index.js apply ../target-repository --include quality --dry-runInitialize a new repository directory:
node packages/cli/dist/index.js init ../new-repository --yesImplemented now:
- pnpm workspace and TypeScript project references
- base preset manifest and template files
- diffable plan/apply engine
- minimal shared config packages
- safe CLI for
init,apply, anddiff
Reserved for later:
- stack composition beyond the base preset
- package manager and dependency mutation inside target repositories
- richer merge strategies for partially managed files
doctorchecks for stack-specific quality toolsupgradeflows for refreshing managed files and preset versions
This monorepo is intentionally shaped so more standards can be added incrementally:
- additional presets such as
react,vue, orlibrary - doctor integrations for
react-doctor,vue-doctor,knip,secretlint,markdownlint,publint, andtsc --noEmit - more shared config packages and stack plugins
- generated PR-friendly change plans per repository