A CLI that keeps ESLint, Prettier, and Stylelint configs in sync with a shared preset — across one project or many — without losing local overrides.

A shared ESLint/Prettier/Stylelint setup is easy to write once and hard to keep in sync — one project gets a manual tweak, the next repo copies an outdated version, and a few months later no two projects agree on the same rules anymore. lintsync writes preset rules directly into your existing config files, tracks which keys it owns, and asks before overwriting anything you changed by hand.
lintsync sync compares each project's actual config against the preset and writes only the keys that are safe to update — the ones you haven't touched yourself.
A key that differs from both the manifest and the current preset is a conflict, not a silent overwrite — sync stops and asks (interactively, in a real terminal) or fails safely (in CI), instead of guessing which value should win.
lintsync get/set/unset edit one field directly, and deliberately leave the manifest untouched — a manual edit is exactly the kind of change that should surface as a conflict on the next sync, not disappear silently.
migrate converts a legacy config to a new format or location without deleting the source or guessing at anything it can't move safely — ESLint's rules carry over automatically, everything else is flagged for manual review.
A registry of known projects lets status/sync --all run against every one of them at once, filterable by tag, with one aggregate exit code CI can act on.
Presets live inside lintsync itself — built in, or built once interactively and saved locally — so there's no separate config package to publish, version, or keep in sync with lintsync's own releases.

lintsync init --preset=vue-app installs dependencies, generates ESLint/Prettier/Stylelint config files, and wires up lint/lint:fix/format npm scripts — in one command. Without --preset in a real terminal, an interactive menu opens: a built-in preset, individual tools with generic defaults, or building a new preset from scratch.

lintsync sync applies safe changes quietly and opens an interactive TUI for conflicts — paged one at a time, with a live preview of the result for each of three choices: accept the preset, keep the local value, or edit manually.

get/set/unset read and write a single field by path, like eslint.rules["@typescript-eslint/no-unused-vars"] — a point edit, not a full-file rewrite, with everything else in the file left exactly as it was.

migrate eslint --to flat and its Prettier/Stylelint equivalents move a config to a new format or location, never deleting the source or overwriting an existing target — anything that can't be moved safely is flagged for manual review instead.

An interactive wizard inside init builds a preset from live data: Prettier's options straight from its own getSupportInfo(), and roughly 80 Stylelint rules sourced from the official -recommended/-standard configs. The finished preset is saved locally and available in every project on the machine.

lintsync projects add/sync --all/status --all keep a tagged list of known projects and run a check across all of them at once — with a distinct exit code for when projects disagree on the result.