CtrlK
BlogDocsLog inGet started
Tessl Logo

mcollina/linting-neostandard-eslint9

Configures ESLint v9 flat config and neostandard for JavaScript and TypeScript projects, including migrating from legacy `.eslintrc*` files or the `standard` package. Use when you need to set up or fix linting with `eslint.config.js` or `eslint.config.mjs`, troubleshoot lint errors, configure neostandard rules, migrate from `.eslintrc` to flat config, or integrate linting into CI pipelines and pre-commit hooks.

96

1.25x
Quality

95%

Does it follow best practices?

Impact

97%

1.25x

Average score across 5 eval scenarios

SecuritybySnyk

Passed

No known issues

Overview
Quality
Evals
Security
Files

criteria.jsonevals/scenario-3/

{
  "context": "Tests whether the agent safely migrates a legacy .eslintrc config to ESLint v9 flat config, removes old config files, avoids mixing legacy and flat config, scopes TS rules correctly, and separates structural migration from rule tuning.",
  "type": "weighted_checklist",
  "checklist": [
    {
      "name": "eslint upgraded to v9",
      "description": "package.json devDependencies specifies eslint at version 9.x (e.g. '^9.0.0' or '^9')",
      "max_score": 8
    },
    {
      "name": "Flat config file created",
      "description": "An eslint.config.js or eslint.config.mjs file is present in the output",
      "max_score": 8
    },
    {
      "name": ".eslintrc.json removed",
      "description": ".eslintrc.json is NOT present in the output (agent deleted or did not output it)",
      "max_score": 10
    },
    {
      "name": "No legacy+flat mix",
      "description": "The output does NOT contain both a .eslintrc* file and an eslint.config.* file simultaneously",
      "max_score": 10
    },
    {
      "name": "TS rules scoped to TS files",
      "description": "TypeScript-specific rules (e.g. @typescript-eslint/* rules) in the flat config are applied only to TS file patterns (*.ts, *.mts, *.cts), not to all files",
      "max_score": 12
    },
    {
      "name": "Base rule disabled for TS variant",
      "description": "Where a TypeScript extension rule is configured (e.g. @typescript-eslint/no-unused-vars), the corresponding base JS rule (e.g. no-unused-vars) is set to 'off'",
      "max_score": 12
    },
    {
      "name": "Migration documented",
      "description": "MIGRATION.md exists and describes the migration approach (not just a list of files changed — at least one sentence about choices made)",
      "max_score": 8
    },
    {
      "name": "lint script updated",
      "description": "The 'lint' script in package.json no longer uses '--ext' flag (which is ESLint v7/v8 syntax, not valid in v9 flat config)",
      "max_score": 10
    },
    {
      "name": "Single root flat config",
      "description": "Only one eslint.config.js (or eslint.config.mjs) file is created at the project root, not multiple per-directory configs",
      "max_score": 10
    },
    {
      "name": "Structural migration separated from rule changes",
      "description": "MIGRATION.md mentions (or the commit approach implies) keeping structural migration separate from rule tuning, OR the flat config closely mirrors the original rules without aggressive cleanup",
      "max_score": 12
    }
  ]
}

evals

SKILL.md

tile.json