plugins/smedjen/skills/eslint-config/SKILL.md
ESLint flat config, custom rules, plugin setup, overrides, and migration from legacy .eslintrc format. Covers rule selection, TypeScript integration, Prettier compatibility, and CI performance.
npx skillsauth add hjemmesidekongen/ai eslint-configInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
ESLint 9 made flat config the default. Every new project should start with eslint.config.js. Legacy .eslintrc is deprecated and will be removed.
eslint.config.js exports an array of config objects. Each object applies to files matched by its files glob. Objects merge in order — later entries override earlier ones for the same rule.
import js from "@eslint/js";
import globals from "globals";
export default [
js.configs.recommended,
{ languageOptions: { globals: globals.browser } },
{ rules: { "no-unused-vars": "warn" } },
];
No more extends string references — import config objects directly. No more env — use languageOptions.globals.
Key differences: extends → spread config objects, env → languageOptions.globals, parser → languageOptions.parser, parserOptions → languageOptions.parserOptions, plugins → object map (not array), ignorePatterns → top-level ignores array.
Run npx @eslint/migrate-config .eslintrc.js for automated migration. Expect manual cleanup for complex plugin setups.
Start with a preset (@eslint/js, typescript-eslint, eslint-config-prettier). Customize only when a preset rule conflicts with team conventions or creates false positives in your stack. Disabling rules is a last resort — prefer configuring them.
no-unused-vars — set to ["error", { argsIgnorePattern: "^_" }] to allow intentional ignoresno-console — warn in app code, disabled in scripts and CLI toolseqeqeq — always error; == null checks are the only safe exception@typescript-eslint/no-explicit-any — warn, not error; some integration seams need it
See references/process.md for flat config structure, TypeScript setup, custom rule creation, plugin setup, shared configs, file-specific overrides, ignores, Prettier integration, performance, CI setup, and anti-patterns.development
Creates a brand from scratch through market research and interactive sparring. Runs competitive research via Perplexity, then guides the user through positioning, audience, voice, values, and content pillars. Produces the full brand guideline set at .ai/brand/{name}/. Use when building a new brand, defining brand strategy for a product, or when /våbenskjold:create is invoked.
testing
Loads brand guidelines from .ai/brand/{name}/ and makes them available to the current context. Progressive disclosure: L1 confirms brand exists, L2 loads summary, L3 loads specific files on demand. Use when a downstream skill or user needs brand context, or when /våbenskjold:apply is invoked.
documentation
Guided reinvention of an existing brand guideline. Loads current brand from .ai/brand/{name}/, identifies what to keep vs change, and walks the user through targeted evolution. Preserves brand equity while updating positioning, voice, or values. Use when refreshing a brand or when /våbenskjold:evolve is invoked.
development
Codifies an existing brand from materials, samples, and references. Analyzes provided content to extract voice patterns, values, and positioning. Produces the same guideline format as brand-strategy. Use when a brand already exists but isn't documented, or when /våbenskjold:audit is invoked.