[{"data":1,"prerenderedAt":2302},["ShallowReactive",2],{"doc-/docs/advanced":3,"all-docs":1006},{"id":4,"title":5,"body":6,"description":999,"extension":1000,"meta":1001,"navigation":60,"order":57,"path":1002,"seo":1003,"stem":1004,"__hash__":1005},"docs/docs/advanced.md","Advanced Configuration",{"type":7,"value":8,"toc":974},"minimark",[9,13,17,22,30,35,38,86,90,93,153,157,160,180,183,187,191,194,356,360,419,423,430,447,451,454,478,482,485,544,547,551,554,618,622,722,733,737,740,756,759,763,766,864,871,875,878,918,922,926,929,946,957,961,967,970],[10,11,5],"h1",{"id":12},"advanced-configuration",[14,15,16],"p",{},"This page covers the technical details for power users: configuration, CI/CD setup, output formats, category filtering, and framework detection.",[18,19,21],"h2",{"id":20},"direct-configuration","Direct Configuration",[14,23,24,25,29],{},"LintMyAI works with a configuration file in your project root. You can use it standalone (via ",[26,27,28],"code",{},"npx lintmyai",") or add a configuration file for custom rule settings.",[31,32,34],"h3",{"id":33},"using-with-an-existing-config","Using with an Existing Config",[14,36,37],{},"Import and add the recommended config to your configuration file:",[39,40,45],"pre",{"className":41,"code":42,"language":43,"meta":44,"style":44},"language-javascript shiki shiki-themes github-light github-dark","import lintmyai from 'lintmyai';\n\nexport default [\n  lintmyai.configs.recommended,\n  // ...your other configs\n];\n","javascript","",[26,46,47,55,62,68,74,80],{"__ignoreMap":44},[48,49,52],"span",{"class":50,"line":51},"line",1,[48,53,54],{},"import lintmyai from 'lintmyai';\n",[48,56,58],{"class":50,"line":57},2,[48,59,61],{"emptyLinePlaceholder":60},true,"\n",[48,63,65],{"class":50,"line":64},3,[48,66,67],{},"export default [\n",[48,69,71],{"class":50,"line":70},4,[48,72,73],{},"  lintmyai.configs.recommended,\n",[48,75,77],{"class":50,"line":76},5,[48,78,79],{},"  // ...your other configs\n",[48,81,83],{"class":50,"line":82},6,[48,84,85],{},"];\n",[31,87,89],{"id":88},"customizing-rule-severity","Customizing Rule Severity",[14,91,92],{},"Override individual rules in your config:",[39,94,96],{"className":41,"code":95,"language":43,"meta":44,"style":44},"import lintmyai from 'lintmyai';\n\nexport default [\n  lintmyai.configs.recommended,\n  {\n    rules: {\n      'lintmyai/no-hardcoded-secrets': 'error',\n      'lintmyai/no-excessive-comments': 'off',\n    },\n  },\n];\n",[26,97,98,102,106,110,114,119,124,130,136,142,148],{"__ignoreMap":44},[48,99,100],{"class":50,"line":51},[48,101,54],{},[48,103,104],{"class":50,"line":57},[48,105,61],{"emptyLinePlaceholder":60},[48,107,108],{"class":50,"line":64},[48,109,67],{},[48,111,112],{"class":50,"line":70},[48,113,73],{},[48,115,116],{"class":50,"line":76},[48,117,118],{},"  {\n",[48,120,121],{"class":50,"line":82},[48,122,123],{},"    rules: {\n",[48,125,127],{"class":50,"line":126},7,[48,128,129],{},"      'lintmyai/no-hardcoded-secrets': 'error',\n",[48,131,133],{"class":50,"line":132},8,[48,134,135],{},"      'lintmyai/no-excessive-comments': 'off',\n",[48,137,139],{"class":50,"line":138},9,[48,140,141],{},"    },\n",[48,143,145],{"class":50,"line":144},10,[48,146,147],{},"  },\n",[48,149,151],{"class":50,"line":150},11,[48,152,85],{},[31,154,156],{"id":155},"init-wizard","Init Wizard",[14,158,159],{},"Generate a configuration file tailored to your project:",[39,161,165],{"className":162,"code":163,"language":164,"meta":44,"style":44},"language-bash shiki shiki-themes github-light github-dark","npx lintmyai init\n","bash",[26,166,167],{"__ignoreMap":44},[48,168,169,173,177],{"class":50,"line":51},[48,170,172],{"class":171},"sScJk","npx",[48,174,176],{"class":175},"sZZnC"," lintmyai",[48,178,179],{"class":175}," init\n",[14,181,182],{},"This detects your framework and creates a config file with the appropriate rule set.",[18,184,186],{"id":185},"cicd-setup","CI/CD Setup",[31,188,190],{"id":189},"github-actions","GitHub Actions",[14,192,193],{},"Add LintMyAI to your GitHub Actions workflow:",[39,195,199],{"className":196,"code":197,"language":198,"meta":44,"style":44},"language-yaml shiki shiki-themes github-light github-dark","name: Code Quality\non: [push, pull_request]\n\njobs:\n  lint:\n    runs-on: ubuntu-latest\n    steps:\n      - uses: actions/checkout@v4\n      - uses: actions/setup-node@v4\n        with:\n          node-version: 20\n      - run: npm install -D lintmyai\n      - run: npx lintmyai --ci\n        env:\n          LINTMYAI_LICENSE_KEY: ${{ secrets.LINTMYAI_LICENSE_KEY }}\n","yaml",[26,200,201,214,235,239,247,254,264,271,284,295,302,312,325,337,345],{"__ignoreMap":44},[48,202,203,207,211],{"class":50,"line":51},[48,204,206],{"class":205},"s9eBZ","name",[48,208,210],{"class":209},"sVt8B",": ",[48,212,213],{"class":175},"Code Quality\n",[48,215,216,220,223,226,229,232],{"class":50,"line":57},[48,217,219],{"class":218},"sj4cs","on",[48,221,222],{"class":209},": [",[48,224,225],{"class":175},"push",[48,227,228],{"class":209},", ",[48,230,231],{"class":175},"pull_request",[48,233,234],{"class":209},"]\n",[48,236,237],{"class":50,"line":64},[48,238,61],{"emptyLinePlaceholder":60},[48,240,241,244],{"class":50,"line":70},[48,242,243],{"class":205},"jobs",[48,245,246],{"class":209},":\n",[48,248,249,252],{"class":50,"line":76},[48,250,251],{"class":205},"  lint",[48,253,246],{"class":209},[48,255,256,259,261],{"class":50,"line":82},[48,257,258],{"class":205},"    runs-on",[48,260,210],{"class":209},[48,262,263],{"class":175},"ubuntu-latest\n",[48,265,266,269],{"class":50,"line":126},[48,267,268],{"class":205},"    steps",[48,270,246],{"class":209},[48,272,273,276,279,281],{"class":50,"line":132},[48,274,275],{"class":209},"      - ",[48,277,278],{"class":205},"uses",[48,280,210],{"class":209},[48,282,283],{"class":175},"actions/checkout@v4\n",[48,285,286,288,290,292],{"class":50,"line":138},[48,287,275],{"class":209},[48,289,278],{"class":205},[48,291,210],{"class":209},[48,293,294],{"class":175},"actions/setup-node@v4\n",[48,296,297,300],{"class":50,"line":144},[48,298,299],{"class":205},"        with",[48,301,246],{"class":209},[48,303,304,307,309],{"class":50,"line":150},[48,305,306],{"class":205},"          node-version",[48,308,210],{"class":209},[48,310,311],{"class":218},"20\n",[48,313,315,317,320,322],{"class":50,"line":314},12,[48,316,275],{"class":209},[48,318,319],{"class":205},"run",[48,321,210],{"class":209},[48,323,324],{"class":175},"npm install -D lintmyai\n",[48,326,328,330,332,334],{"class":50,"line":327},13,[48,329,275],{"class":209},[48,331,319],{"class":205},[48,333,210],{"class":209},[48,335,336],{"class":175},"npx lintmyai --ci\n",[48,338,340,343],{"class":50,"line":339},14,[48,341,342],{"class":205},"        env",[48,344,246],{"class":209},[48,346,348,351,353],{"class":50,"line":347},15,[48,349,350],{"class":205},"          LINTMYAI_LICENSE_KEY",[48,352,210],{"class":209},[48,354,355],{"class":175},"${{ secrets.LINTMYAI_LICENSE_KEY }}\n",[31,357,359],{"id":358},"gitlab-ci","GitLab CI",[39,361,363],{"className":196,"code":362,"language":198,"meta":44,"style":44},"lint:\n  image: node:20\n  script:\n    - npm install -D lintmyai\n    - npx lintmyai --ci\n  variables:\n    LINTMYAI_LICENSE_KEY: $LINTMYAI_LICENSE_KEY\n",[26,364,365,372,382,389,396,402,409],{"__ignoreMap":44},[48,366,367,370],{"class":50,"line":51},[48,368,369],{"class":205},"lint",[48,371,246],{"class":209},[48,373,374,377,379],{"class":50,"line":57},[48,375,376],{"class":205},"  image",[48,378,210],{"class":209},[48,380,381],{"class":175},"node:20\n",[48,383,384,387],{"class":50,"line":64},[48,385,386],{"class":205},"  script",[48,388,246],{"class":209},[48,390,391,394],{"class":50,"line":70},[48,392,393],{"class":209},"    - ",[48,395,324],{"class":175},[48,397,398,400],{"class":50,"line":76},[48,399,393],{"class":209},[48,401,336],{"class":175},[48,403,404,407],{"class":50,"line":82},[48,405,406],{"class":205},"  variables",[48,408,246],{"class":209},[48,410,411,414,416],{"class":50,"line":126},[48,412,413],{"class":205},"    LINTMYAI_LICENSE_KEY",[48,415,210],{"class":209},[48,417,418],{"class":175},"$LINTMYAI_LICENSE_KEY\n",[31,420,422],{"id":421},"ci-mode","CI Mode",[14,424,425,426,429],{},"The ",[26,427,428],{},"--ci"," flag changes behavior for pipeline use:",[431,432,433,437],"ul",{},[434,435,436],"li",{},"Exits with a non-zero code when issues are found (fails the build)",[434,438,439,440,443,444],{},"Set ",[26,441,442],{},"LINTMYAI_LICENSE_KEY"," as a CI secret instead of running ",[26,445,446],{},"activate",[18,448,450],{"id":449},"sarif-output","SARIF Output",[14,452,453],{},"Generate SARIF (Static Analysis Results Interchange Format) output for integration with GitHub Code Scanning:",[39,455,457],{"className":162,"code":456,"language":164,"meta":44,"style":44},"npx lintmyai --format sarif > results.sarif\n",[26,458,459],{"__ignoreMap":44},[48,460,461,463,465,468,471,475],{"class":50,"line":51},[48,462,172],{"class":171},[48,464,176],{"class":175},[48,466,467],{"class":218}," --format",[48,469,470],{"class":175}," sarif",[48,472,474],{"class":473},"szBVR"," >",[48,476,477],{"class":175}," results.sarif\n",[31,479,481],{"id":480},"github-code-scanning-integration","GitHub Code Scanning Integration",[14,483,484],{},"Upload SARIF results to GitHub Code Scanning in your workflow:",[39,486,488],{"className":196,"code":487,"language":198,"meta":44,"style":44},"- run: npx lintmyai --format sarif > results.sarif\n  env:\n    LINTMYAI_LICENSE_KEY: ${{ secrets.LINTMYAI_LICENSE_KEY }}\n- uses: github/codeql-action/upload-sarif@v3\n  with:\n    sarif_file: results.sarif\n",[26,489,490,501,508,516,527,534],{"__ignoreMap":44},[48,491,492,495,497,499],{"class":50,"line":51},[48,493,494],{"class":209},"- ",[48,496,319],{"class":205},[48,498,210],{"class":209},[48,500,456],{"class":175},[48,502,503,506],{"class":50,"line":57},[48,504,505],{"class":205},"  env",[48,507,246],{"class":209},[48,509,510,512,514],{"class":50,"line":64},[48,511,413],{"class":205},[48,513,210],{"class":209},[48,515,355],{"class":175},[48,517,518,520,522,524],{"class":50,"line":70},[48,519,494],{"class":209},[48,521,278],{"class":205},[48,523,210],{"class":209},[48,525,526],{"class":175},"github/codeql-action/upload-sarif@v3\n",[48,528,529,532],{"class":50,"line":76},[48,530,531],{"class":205},"  with",[48,533,246],{"class":209},[48,535,536,539,541],{"class":50,"line":82},[48,537,538],{"class":205},"    sarif_file",[48,540,210],{"class":209},[48,542,543],{"class":175},"results.sarif\n",[14,545,546],{},"This surfaces LintMyAI findings directly in your pull request annotations and the Security tab.",[18,548,550],{"id":549},"category-filtering","Category Filtering",[14,552,553],{},"Focus scans on specific issue categories:",[39,555,557],{"className":162,"code":556,"language":164,"meta":44,"style":44},"# Only check for security issues\nnpx lintmyai --category security\n\n# Only check for hallucinated imports\nnpx lintmyai --category hallucination\n\n# Exclude complexity rules\nnpx lintmyai --exclude-category complexity\n",[26,558,559,565,577,581,586,597,601,606],{"__ignoreMap":44},[48,560,561],{"class":50,"line":51},[48,562,564],{"class":563},"sJ8bj","# Only check for security issues\n",[48,566,567,569,571,574],{"class":50,"line":57},[48,568,172],{"class":171},[48,570,176],{"class":175},[48,572,573],{"class":218}," --category",[48,575,576],{"class":175}," security\n",[48,578,579],{"class":50,"line":64},[48,580,61],{"emptyLinePlaceholder":60},[48,582,583],{"class":50,"line":70},[48,584,585],{"class":563},"# Only check for hallucinated imports\n",[48,587,588,590,592,594],{"class":50,"line":76},[48,589,172],{"class":171},[48,591,176],{"class":175},[48,593,573],{"class":218},[48,595,596],{"class":175}," hallucination\n",[48,598,599],{"class":50,"line":82},[48,600,61],{"emptyLinePlaceholder":60},[48,602,603],{"class":50,"line":126},[48,604,605],{"class":563},"# Exclude complexity rules\n",[48,607,608,610,612,615],{"class":50,"line":132},[48,609,172],{"class":171},[48,611,176],{"class":175},[48,613,614],{"class":218}," --exclude-category",[48,616,617],{"class":175}," complexity\n",[31,619,621],{"id":620},"available-categories","Available Categories",[623,624,625,638],"table",{},[626,627,628],"thead",{},[629,630,631,635],"tr",{},[632,633,634],"th",{},"Category",[632,636,637],{},"What It Catches",[639,640,641,652,662,672,682,692,702,712],"tbody",{},[629,642,643,649],{},[644,645,646],"td",{},[26,647,648],{},"hallucination",[644,650,651],{},"Fake packages, non-existent APIs",[629,653,654,659],{},[644,655,656],{},[26,657,658],{},"security",[644,660,661],{},"Hardcoded secrets, unsafe patterns",[629,663,664,669],{},[644,665,666],{},[26,667,668],{},"dead-code",[644,670,671],{},"Unused functions, empty error handlers",[629,673,674,679],{},[644,675,676],{},[26,677,678],{},"ai-behavior",[644,680,681],{},"Placeholder comments, hedging, AI fingerprints",[629,683,684,689],{},[644,685,686],{},[26,687,688],{},"boilerplate",[644,690,691],{},"Excessive comments, over-documented code",[629,693,694,699],{},[644,695,696],{},[26,697,698],{},"complexity",[644,700,701],{},"Overly complex functions, cognitive load",[629,703,704,709],{},[644,705,706],{},[26,707,708],{},"testing",[644,710,711],{},"Test quality issues",[629,713,714,719],{},[644,715,716],{},[26,717,718],{},"framework",[644,720,721],{},"Framework-specific anti-patterns",[14,723,724,725,728,729,732],{},"When ",[26,726,727],{},"--category"," is specified, ",[26,730,731],{},"--exclude-category"," is ignored.",[18,734,736],{"id":735},"json-output","JSON Output",[14,738,739],{},"Get machine-readable output for programmatic use:",[39,741,743],{"className":162,"code":742,"language":164,"meta":44,"style":44},"npx lintmyai --format json\n",[26,744,745],{"__ignoreMap":44},[48,746,747,749,751,753],{"class":50,"line":51},[48,748,172],{"class":171},[48,750,176],{"class":175},[48,752,467],{"class":218},[48,754,755],{"class":175}," json\n",[14,757,758],{},"This outputs a JSON array of findings with file paths, line numbers, rule IDs, and messages -- useful for custom tooling, dashboards, or integrating with other systems.",[18,760,762],{"id":761},"framework-packs","Framework Packs",[14,764,765],{},"LintMyAI auto-detects your framework and loads the appropriate rule pack:",[623,767,768,781],{},[626,769,770],{},[629,771,772,775,778],{},[632,773,774],{},"Framework",[632,776,777],{},"Detection",[632,779,780],{},"Additional Rules",[639,782,783,804,819,834,849],{},[629,784,785,791,801],{},[644,786,787],{},[788,789,790],"strong",{},"React",[644,792,793,796,797,800],{},[26,794,795],{},"react"," or ",[26,798,799],{},"react-dom"," in dependencies",[644,802,803],{},"Hooks rules, component patterns",[629,805,806,811,816],{},[644,807,808],{},[788,809,810],{},"Next.js",[644,812,813,800],{},[26,814,815],{},"next",[644,817,818],{},"React rules + server-side patterns",[629,820,821,826,831],{},[644,822,823],{},[788,824,825],{},"Vue",[644,827,828,800],{},[26,829,830],{},"vue",[644,832,833],{},"Vue-specific linting",[629,835,836,841,846],{},[644,837,838],{},[788,839,840],{},"Nuxt",[644,842,843,800],{},[26,844,845],{},"nuxt",[644,847,848],{},"Vue rules + Nuxt patterns",[629,850,851,856,861],{},[644,852,853],{},[788,854,855],{},"Express",[644,857,858,800],{},[26,859,860],{},"express",[644,862,863],{},"Server-side patterns",[14,865,866,867,870],{},"Detection is automatic based on your ",[26,868,869],{},"package.json",". No configuration needed.",[18,872,874],{"id":873},"scanning-specific-files","Scanning Specific Files",[14,876,877],{},"Target specific files or directories:",[39,879,881],{"className":162,"code":880,"language":164,"meta":44,"style":44},"# Scan a directory\nnpx lintmyai src/\n\n# Scan specific files\nnpx lintmyai src/api/auth.ts src/utils/helpers.ts\n",[26,882,883,888,897,901,906],{"__ignoreMap":44},[48,884,885],{"class":50,"line":51},[48,886,887],{"class":563},"# Scan a directory\n",[48,889,890,892,894],{"class":50,"line":57},[48,891,172],{"class":171},[48,893,176],{"class":175},[48,895,896],{"class":175}," src/\n",[48,898,899],{"class":50,"line":64},[48,900,61],{"emptyLinePlaceholder":60},[48,902,903],{"class":50,"line":70},[48,904,905],{"class":563},"# Scan specific files\n",[48,907,908,910,912,915],{"class":50,"line":76},[48,909,172],{"class":171},[48,911,176],{"class":175},[48,913,914],{"class":175}," src/api/auth.ts",[48,916,917],{"class":175}," src/utils/helpers.ts\n",[18,919,921],{"id":920},"license-activation","License Activation",[31,923,925],{"id":924},"local-development","Local Development",[14,927,928],{},"Activate your license once per machine:",[39,930,932],{"className":162,"code":931,"language":164,"meta":44,"style":44},"npx lintmyai activate YOUR_LICENSE_KEY\n",[26,933,934],{"__ignoreMap":44},[48,935,936,938,940,943],{"class":50,"line":51},[48,937,172],{"class":171},[48,939,176],{"class":175},[48,941,942],{"class":175}," activate",[48,944,945],{"class":175}," YOUR_LICENSE_KEY\n",[14,947,948,949,952,953,956],{},"The license is stored at ",[26,950,951],{},"~/.config/lintmyai/license.json",". No ",[26,954,955],{},".env"," file needed.",[31,958,960],{"id":959},"cicd-environments","CI/CD Environments",[14,962,963,964,966],{},"Set the ",[26,965,442],{}," environment variable in your CI secrets. No activation step needed -- the environment variable is checked automatically during scans.",[14,968,969],{},"License checks are disk-only during scans. No network calls, no latency impact.",[971,972,973],"style",{},"html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .s9eBZ, html code.shiki .s9eBZ{--shiki-default:#22863A;--shiki-dark:#85E89D}html pre.shiki code .sVt8B, html code.shiki .sVt8B{--shiki-default:#24292E;--shiki-dark:#E1E4E8}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html pre.shiki code .szBVR, html code.shiki .szBVR{--shiki-default:#D73A49;--shiki-dark:#F97583}html pre.shiki code .sJ8bj, html code.shiki .sJ8bj{--shiki-default:#6A737D;--shiki-dark:#6A737D}",{"title":44,"searchDepth":57,"depth":57,"links":975},[976,981,986,989,992,993,994,995],{"id":20,"depth":57,"text":21,"children":977},[978,979,980],{"id":33,"depth":64,"text":34},{"id":88,"depth":64,"text":89},{"id":155,"depth":64,"text":156},{"id":185,"depth":57,"text":186,"children":982},[983,984,985],{"id":189,"depth":64,"text":190},{"id":358,"depth":64,"text":359},{"id":421,"depth":64,"text":422},{"id":449,"depth":57,"text":450,"children":987},[988],{"id":480,"depth":64,"text":481},{"id":549,"depth":57,"text":550,"children":990},[991],{"id":620,"depth":64,"text":621},{"id":735,"depth":57,"text":736},{"id":761,"depth":57,"text":762},{"id":873,"depth":57,"text":874},{"id":920,"depth":57,"text":921,"children":996},[997,998],{"id":924,"depth":64,"text":925},{"id":959,"depth":64,"text":960},"Technical reference for configuration, CI/CD pipelines, SARIF output, category filtering, and framework packs.","md",{},"/docs/advanced",{"title":5,"description":999},"docs/advanced","MHv1sNuF3QLNtmQUWk2jFTwXFbByLhVDR4Iu7oW4P0s",[1007,1241,1981,2166],{"id":1008,"title":1009,"body":1010,"description":1235,"extension":1000,"meta":1236,"navigation":60,"order":51,"path":1237,"seo":1238,"stem":1239,"__hash__":1240},"docs/docs/getting-started.md","Getting Started with LintMyAI",{"type":7,"value":1011,"toc":1226},[1012,1016,1019,1023,1026,1032,1036,1039,1057,1060,1071,1075,1078,1092,1095,1105,1108,1111,1114,1146,1150,1156,1164,1167,1171,1176,1189,1194,1198,1223],[10,1013,1015],{"id":1014},"getting-started","Getting Started",[14,1017,1018],{},"LintMyAI catches the mistakes AI coding assistants make -- hallucinated packages, hardcoded secrets, dead code, and more. Get running in three steps.",[18,1020,1022],{"id":1021},"step-1-buy-a-license","Step 1: Buy a License",[14,1024,1025],{},"Subscribe to LintMyAI to unlock all 28 rules. From £10/month, cancel anytime.",[1027,1028,1031],"button-link",{"href":1029,"size":1030},"https://lintmyai.com/pricing","lg","Subscribe to LintMyAI",[18,1033,1035],{"id":1034},"step-2-install","Step 2: Install",[14,1037,1038],{},"Add LintMyAI to your project:",[39,1040,1041],{"className":162,"code":324,"language":164,"meta":44,"style":44},[26,1042,1043],{"__ignoreMap":44},[48,1044,1045,1048,1051,1054],{"class":50,"line":51},[48,1046,1047],{"class":171},"npm",[48,1049,1050],{"class":175}," install",[48,1052,1053],{"class":218}," -D",[48,1055,1056],{"class":175}," lintmyai\n",[14,1058,1059],{},"Or run it directly without installing:",[39,1061,1063],{"className":162,"code":1062,"language":164,"meta":44,"style":44},"npx lintmyai\n",[26,1064,1065],{"__ignoreMap":44},[48,1066,1067,1069],{"class":50,"line":51},[48,1068,172],{"class":171},[48,1070,1056],{"class":175},[18,1072,1074],{"id":1073},"step-3-activate-and-run","Step 3: Activate and Run",[14,1076,1077],{},"Activate your license (one-time per machine):",[39,1079,1080],{"className":162,"code":931,"language":164,"meta":44,"style":44},[26,1081,1082],{"__ignoreMap":44},[48,1083,1084,1086,1088,1090],{"class":50,"line":51},[48,1085,172],{"class":171},[48,1087,176],{"class":175},[48,1089,942],{"class":175},[48,1091,945],{"class":175},[14,1093,1094],{},"Then scan your project:",[39,1096,1097],{"className":162,"code":1062,"language":164,"meta":44,"style":44},[26,1098,1099],{"__ignoreMap":44},[48,1100,1101,1103],{"class":50,"line":51},[48,1102,172],{"class":171},[48,1104,1056],{"class":175},[14,1106,1107],{},"That's it. LintMyAI auto-detects your framework, loads the right rules, and reports issues in seconds.",[18,1109,637],{"id":1110},"what-it-catches",[14,1112,1113],{},"LintMyAI finds the patterns AI assistants commonly get wrong:",[431,1115,1116,1122,1128,1134,1140],{},[434,1117,1118,1121],{},[788,1119,1120],{},"Fake packages"," -- AI sometimes imports packages that don't exist. LintMyAI flags them before they crash your build.",[434,1123,1124,1127],{},[788,1125,1126],{},"Hardcoded secrets"," -- API keys and tokens left in your source code. Caught before they leak.",[434,1129,1130,1133],{},[788,1131,1132],{},"Dead code"," -- Functions that do nothing, error handlers that silently swallow errors, async functions that never await.",[434,1135,1136,1139],{},[788,1137,1138],{},"Security issues"," -- Unsafe patterns like missing input validation or exposed credentials.",[434,1141,1142,1145],{},[788,1143,1144],{},"AI quirks"," -- Placeholder comments, excessive hedging, over-commented code, and other AI fingerprints.",[18,1147,1149],{"id":1148},"what-youll-see","What You'll See",[14,1151,1152,1153,1155],{},"When you run ",[26,1154,28],{},", output looks like this:",[39,1157,1162],{"className":1158,"code":1160,"language":1161},[1159],"language-text","LintMyAI v1.0.0\n\nScanning 42 files...\n\nsrc/api/auth.ts\n  12:5  warning  Async function has no await expression     no-fake-async\n  28:9  warning  Hardcoded secret detected: API_KEY         no-hardcoded-secrets\n\nsrc/utils/helpers.ts\n  5:1   warning  Package 'left-pad' may not exist on npm    no-hallucinated-packages\n\n3 warnings found (3 rules triggered)\n","text",[26,1163,1160],{"__ignoreMap":44},[14,1165,1166],{},"Each warning tells you the file, line number, what the issue is, and which rule caught it.",[18,1168,1170],{"id":1169},"for-cicd-pipelines","For CI/CD Pipelines",[14,1172,963,1173,1175],{},[26,1174,442],{}," environment variable instead of running activate:",[39,1177,1178],{"className":162,"code":336,"language":164,"meta":44,"style":44},[26,1179,1180],{"__ignoreMap":44},[48,1181,1182,1184,1186],{"class":50,"line":51},[48,1183,172],{"class":171},[48,1185,176],{"class":175},[48,1187,1188],{"class":218}," --ci\n",[14,1190,425,1191,1193],{},[26,1192,428],{}," flag exits with a non-zero code when issues are found, failing the build.",[18,1195,1197],{"id":1196},"next-steps","Next Steps",[431,1199,1200,1209,1215],{},[434,1201,1202,1203,1208],{},"Browse the ",[1204,1205,1207],"a",{"href":1206},"/rules","full rule list"," to see all the rules LintMyAI checks",[434,1210,1211,1212,1214],{},"Read the ",[1204,1213,5],{"href":1002}," guide for technical details",[434,1216,1217,1218,1222],{},"Check out ",[1204,1219,1221],{"href":1220},"/docs/why-check-ai-code","Why Check AI Generated Code"," for the security perspective",[971,1224,1225],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html pre.shiki code .sj4cs, html code.shiki .sj4cs{--shiki-default:#005CC5;--shiki-dark:#79B8FF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":44,"searchDepth":57,"depth":57,"links":1227},[1228,1229,1230,1231,1232,1233,1234],{"id":1021,"depth":57,"text":1022},{"id":1034,"depth":57,"text":1035},{"id":1073,"depth":57,"text":1074},{"id":1110,"depth":57,"text":637},{"id":1148,"depth":57,"text":1149},{"id":1169,"depth":57,"text":1170},{"id":1196,"depth":57,"text":1197},"Get up and running with LintMyAI in under 2 minutes. Buy, install, run.",{},"/docs/getting-started",{"title":1009,"description":1235},"docs/getting-started","dVLvCIVPp_BVtar-bPUQwaBnBh7o3kPrR5CHXL5bN98",{"id":4,"title":5,"body":1242,"description":999,"extension":1000,"meta":1979,"navigation":60,"order":57,"path":1002,"seo":1980,"stem":1004,"__hash__":1005},{"type":7,"value":1243,"toc":1954},[1244,1246,1248,1250,1254,1256,1258,1286,1288,1290,1338,1340,1342,1354,1356,1358,1360,1362,1486,1488,1538,1540,1544,1554,1556,1558,1576,1578,1580,1632,1634,1636,1638,1692,1694,1770,1776,1778,1780,1794,1796,1798,1800,1876,1880,1882,1884,1918,1920,1922,1924,1938,1944,1946,1950,1952],[10,1245,5],{"id":12},[14,1247,16],{},[18,1249,21],{"id":20},[14,1251,24,1252,29],{},[26,1253,28],{},[31,1255,34],{"id":33},[14,1257,37],{},[39,1259,1260],{"className":41,"code":42,"language":43,"meta":44,"style":44},[26,1261,1262,1266,1270,1274,1278,1282],{"__ignoreMap":44},[48,1263,1264],{"class":50,"line":51},[48,1265,54],{},[48,1267,1268],{"class":50,"line":57},[48,1269,61],{"emptyLinePlaceholder":60},[48,1271,1272],{"class":50,"line":64},[48,1273,67],{},[48,1275,1276],{"class":50,"line":70},[48,1277,73],{},[48,1279,1280],{"class":50,"line":76},[48,1281,79],{},[48,1283,1284],{"class":50,"line":82},[48,1285,85],{},[31,1287,89],{"id":88},[14,1289,92],{},[39,1291,1292],{"className":41,"code":95,"language":43,"meta":44,"style":44},[26,1293,1294,1298,1302,1306,1310,1314,1318,1322,1326,1330,1334],{"__ignoreMap":44},[48,1295,1296],{"class":50,"line":51},[48,1297,54],{},[48,1299,1300],{"class":50,"line":57},[48,1301,61],{"emptyLinePlaceholder":60},[48,1303,1304],{"class":50,"line":64},[48,1305,67],{},[48,1307,1308],{"class":50,"line":70},[48,1309,73],{},[48,1311,1312],{"class":50,"line":76},[48,1313,118],{},[48,1315,1316],{"class":50,"line":82},[48,1317,123],{},[48,1319,1320],{"class":50,"line":126},[48,1321,129],{},[48,1323,1324],{"class":50,"line":132},[48,1325,135],{},[48,1327,1328],{"class":50,"line":138},[48,1329,141],{},[48,1331,1332],{"class":50,"line":144},[48,1333,147],{},[48,1335,1336],{"class":50,"line":150},[48,1337,85],{},[31,1339,156],{"id":155},[14,1341,159],{},[39,1343,1344],{"className":162,"code":163,"language":164,"meta":44,"style":44},[26,1345,1346],{"__ignoreMap":44},[48,1347,1348,1350,1352],{"class":50,"line":51},[48,1349,172],{"class":171},[48,1351,176],{"class":175},[48,1353,179],{"class":175},[14,1355,182],{},[18,1357,186],{"id":185},[31,1359,190],{"id":189},[14,1361,193],{},[39,1363,1364],{"className":196,"code":197,"language":198,"meta":44,"style":44},[26,1365,1366,1374,1388,1392,1398,1404,1412,1418,1428,1438,1444,1452,1462,1472,1478],{"__ignoreMap":44},[48,1367,1368,1370,1372],{"class":50,"line":51},[48,1369,206],{"class":205},[48,1371,210],{"class":209},[48,1373,213],{"class":175},[48,1375,1376,1378,1380,1382,1384,1386],{"class":50,"line":57},[48,1377,219],{"class":218},[48,1379,222],{"class":209},[48,1381,225],{"class":175},[48,1383,228],{"class":209},[48,1385,231],{"class":175},[48,1387,234],{"class":209},[48,1389,1390],{"class":50,"line":64},[48,1391,61],{"emptyLinePlaceholder":60},[48,1393,1394,1396],{"class":50,"line":70},[48,1395,243],{"class":205},[48,1397,246],{"class":209},[48,1399,1400,1402],{"class":50,"line":76},[48,1401,251],{"class":205},[48,1403,246],{"class":209},[48,1405,1406,1408,1410],{"class":50,"line":82},[48,1407,258],{"class":205},[48,1409,210],{"class":209},[48,1411,263],{"class":175},[48,1413,1414,1416],{"class":50,"line":126},[48,1415,268],{"class":205},[48,1417,246],{"class":209},[48,1419,1420,1422,1424,1426],{"class":50,"line":132},[48,1421,275],{"class":209},[48,1423,278],{"class":205},[48,1425,210],{"class":209},[48,1427,283],{"class":175},[48,1429,1430,1432,1434,1436],{"class":50,"line":138},[48,1431,275],{"class":209},[48,1433,278],{"class":205},[48,1435,210],{"class":209},[48,1437,294],{"class":175},[48,1439,1440,1442],{"class":50,"line":144},[48,1441,299],{"class":205},[48,1443,246],{"class":209},[48,1445,1446,1448,1450],{"class":50,"line":150},[48,1447,306],{"class":205},[48,1449,210],{"class":209},[48,1451,311],{"class":218},[48,1453,1454,1456,1458,1460],{"class":50,"line":314},[48,1455,275],{"class":209},[48,1457,319],{"class":205},[48,1459,210],{"class":209},[48,1461,324],{"class":175},[48,1463,1464,1466,1468,1470],{"class":50,"line":327},[48,1465,275],{"class":209},[48,1467,319],{"class":205},[48,1469,210],{"class":209},[48,1471,336],{"class":175},[48,1473,1474,1476],{"class":50,"line":339},[48,1475,342],{"class":205},[48,1477,246],{"class":209},[48,1479,1480,1482,1484],{"class":50,"line":347},[48,1481,350],{"class":205},[48,1483,210],{"class":209},[48,1485,355],{"class":175},[31,1487,359],{"id":358},[39,1489,1490],{"className":196,"code":362,"language":198,"meta":44,"style":44},[26,1491,1492,1498,1506,1512,1518,1524,1530],{"__ignoreMap":44},[48,1493,1494,1496],{"class":50,"line":51},[48,1495,369],{"class":205},[48,1497,246],{"class":209},[48,1499,1500,1502,1504],{"class":50,"line":57},[48,1501,376],{"class":205},[48,1503,210],{"class":209},[48,1505,381],{"class":175},[48,1507,1508,1510],{"class":50,"line":64},[48,1509,386],{"class":205},[48,1511,246],{"class":209},[48,1513,1514,1516],{"class":50,"line":70},[48,1515,393],{"class":209},[48,1517,324],{"class":175},[48,1519,1520,1522],{"class":50,"line":76},[48,1521,393],{"class":209},[48,1523,336],{"class":175},[48,1525,1526,1528],{"class":50,"line":82},[48,1527,406],{"class":205},[48,1529,246],{"class":209},[48,1531,1532,1534,1536],{"class":50,"line":126},[48,1533,413],{"class":205},[48,1535,210],{"class":209},[48,1537,418],{"class":175},[31,1539,422],{"id":421},[14,1541,425,1542,429],{},[26,1543,428],{},[431,1545,1546,1548],{},[434,1547,436],{},[434,1549,439,1550,443,1552],{},[26,1551,442],{},[26,1553,446],{},[18,1555,450],{"id":449},[14,1557,453],{},[39,1559,1560],{"className":162,"code":456,"language":164,"meta":44,"style":44},[26,1561,1562],{"__ignoreMap":44},[48,1563,1564,1566,1568,1570,1572,1574],{"class":50,"line":51},[48,1565,172],{"class":171},[48,1567,176],{"class":175},[48,1569,467],{"class":218},[48,1571,470],{"class":175},[48,1573,474],{"class":473},[48,1575,477],{"class":175},[31,1577,481],{"id":480},[14,1579,484],{},[39,1581,1582],{"className":196,"code":487,"language":198,"meta":44,"style":44},[26,1583,1584,1594,1600,1608,1618,1624],{"__ignoreMap":44},[48,1585,1586,1588,1590,1592],{"class":50,"line":51},[48,1587,494],{"class":209},[48,1589,319],{"class":205},[48,1591,210],{"class":209},[48,1593,456],{"class":175},[48,1595,1596,1598],{"class":50,"line":57},[48,1597,505],{"class":205},[48,1599,246],{"class":209},[48,1601,1602,1604,1606],{"class":50,"line":64},[48,1603,413],{"class":205},[48,1605,210],{"class":209},[48,1607,355],{"class":175},[48,1609,1610,1612,1614,1616],{"class":50,"line":70},[48,1611,494],{"class":209},[48,1613,278],{"class":205},[48,1615,210],{"class":209},[48,1617,526],{"class":175},[48,1619,1620,1622],{"class":50,"line":76},[48,1621,531],{"class":205},[48,1623,246],{"class":209},[48,1625,1626,1628,1630],{"class":50,"line":82},[48,1627,538],{"class":205},[48,1629,210],{"class":209},[48,1631,543],{"class":175},[14,1633,546],{},[18,1635,550],{"id":549},[14,1637,553],{},[39,1639,1640],{"className":162,"code":556,"language":164,"meta":44,"style":44},[26,1641,1642,1646,1656,1660,1664,1674,1678,1682],{"__ignoreMap":44},[48,1643,1644],{"class":50,"line":51},[48,1645,564],{"class":563},[48,1647,1648,1650,1652,1654],{"class":50,"line":57},[48,1649,172],{"class":171},[48,1651,176],{"class":175},[48,1653,573],{"class":218},[48,1655,576],{"class":175},[48,1657,1658],{"class":50,"line":64},[48,1659,61],{"emptyLinePlaceholder":60},[48,1661,1662],{"class":50,"line":70},[48,1663,585],{"class":563},[48,1665,1666,1668,1670,1672],{"class":50,"line":76},[48,1667,172],{"class":171},[48,1669,176],{"class":175},[48,1671,573],{"class":218},[48,1673,596],{"class":175},[48,1675,1676],{"class":50,"line":82},[48,1677,61],{"emptyLinePlaceholder":60},[48,1679,1680],{"class":50,"line":126},[48,1681,605],{"class":563},[48,1683,1684,1686,1688,1690],{"class":50,"line":132},[48,1685,172],{"class":171},[48,1687,176],{"class":175},[48,1689,614],{"class":218},[48,1691,617],{"class":175},[31,1693,621],{"id":620},[623,1695,1696,1704],{},[626,1697,1698],{},[629,1699,1700,1702],{},[632,1701,634],{},[632,1703,637],{},[639,1705,1706,1714,1722,1730,1738,1746,1754,1762],{},[629,1707,1708,1712],{},[644,1709,1710],{},[26,1711,648],{},[644,1713,651],{},[629,1715,1716,1720],{},[644,1717,1718],{},[26,1719,658],{},[644,1721,661],{},[629,1723,1724,1728],{},[644,1725,1726],{},[26,1727,668],{},[644,1729,671],{},[629,1731,1732,1736],{},[644,1733,1734],{},[26,1735,678],{},[644,1737,681],{},[629,1739,1740,1744],{},[644,1741,1742],{},[26,1743,688],{},[644,1745,691],{},[629,1747,1748,1752],{},[644,1749,1750],{},[26,1751,698],{},[644,1753,701],{},[629,1755,1756,1760],{},[644,1757,1758],{},[26,1759,708],{},[644,1761,711],{},[629,1763,1764,1768],{},[644,1765,1766],{},[26,1767,718],{},[644,1769,721],{},[14,1771,724,1772,728,1774,732],{},[26,1773,727],{},[26,1775,731],{},[18,1777,736],{"id":735},[14,1779,739],{},[39,1781,1782],{"className":162,"code":742,"language":164,"meta":44,"style":44},[26,1783,1784],{"__ignoreMap":44},[48,1785,1786,1788,1790,1792],{"class":50,"line":51},[48,1787,172],{"class":171},[48,1789,176],{"class":175},[48,1791,467],{"class":218},[48,1793,755],{"class":175},[14,1795,758],{},[18,1797,762],{"id":761},[14,1799,765],{},[623,1801,1802,1812],{},[626,1803,1804],{},[629,1805,1806,1808,1810],{},[632,1807,774],{},[632,1809,777],{},[632,1811,780],{},[639,1813,1814,1828,1840,1852,1864],{},[629,1815,1816,1820,1826],{},[644,1817,1818],{},[788,1819,790],{},[644,1821,1822,796,1824,800],{},[26,1823,795],{},[26,1825,799],{},[644,1827,803],{},[629,1829,1830,1834,1838],{},[644,1831,1832],{},[788,1833,810],{},[644,1835,1836,800],{},[26,1837,815],{},[644,1839,818],{},[629,1841,1842,1846,1850],{},[644,1843,1844],{},[788,1845,825],{},[644,1847,1848,800],{},[26,1849,830],{},[644,1851,833],{},[629,1853,1854,1858,1862],{},[644,1855,1856],{},[788,1857,840],{},[644,1859,1860,800],{},[26,1861,845],{},[644,1863,848],{},[629,1865,1866,1870,1874],{},[644,1867,1868],{},[788,1869,855],{},[644,1871,1872,800],{},[26,1873,860],{},[644,1875,863],{},[14,1877,866,1878,870],{},[26,1879,869],{},[18,1881,874],{"id":873},[14,1883,877],{},[39,1885,1886],{"className":162,"code":880,"language":164,"meta":44,"style":44},[26,1887,1888,1892,1900,1904,1908],{"__ignoreMap":44},[48,1889,1890],{"class":50,"line":51},[48,1891,887],{"class":563},[48,1893,1894,1896,1898],{"class":50,"line":57},[48,1895,172],{"class":171},[48,1897,176],{"class":175},[48,1899,896],{"class":175},[48,1901,1902],{"class":50,"line":64},[48,1903,61],{"emptyLinePlaceholder":60},[48,1905,1906],{"class":50,"line":70},[48,1907,905],{"class":563},[48,1909,1910,1912,1914,1916],{"class":50,"line":76},[48,1911,172],{"class":171},[48,1913,176],{"class":175},[48,1915,914],{"class":175},[48,1917,917],{"class":175},[18,1919,921],{"id":920},[31,1921,925],{"id":924},[14,1923,928],{},[39,1925,1926],{"className":162,"code":931,"language":164,"meta":44,"style":44},[26,1927,1928],{"__ignoreMap":44},[48,1929,1930,1932,1934,1936],{"class":50,"line":51},[48,1931,172],{"class":171},[48,1933,176],{"class":175},[48,1935,942],{"class":175},[48,1937,945],{"class":175},[14,1939,948,1940,952,1942,956],{},[26,1941,951],{},[26,1943,955],{},[31,1945,960],{"id":959},[14,1947,963,1948,966],{},[26,1949,442],{},[14,1951,969],{},[971,1953,973],{},{"title":44,"searchDepth":57,"depth":57,"links":1955},[1956,1961,1966,1969,1972,1973,1974,1975],{"id":20,"depth":57,"text":21,"children":1957},[1958,1959,1960],{"id":33,"depth":64,"text":34},{"id":88,"depth":64,"text":89},{"id":155,"depth":64,"text":156},{"id":185,"depth":57,"text":186,"children":1962},[1963,1964,1965],{"id":189,"depth":64,"text":190},{"id":358,"depth":64,"text":359},{"id":421,"depth":64,"text":422},{"id":449,"depth":57,"text":450,"children":1967},[1968],{"id":480,"depth":64,"text":481},{"id":549,"depth":57,"text":550,"children":1970},[1971],{"id":620,"depth":64,"text":621},{"id":735,"depth":57,"text":736},{"id":761,"depth":57,"text":762},{"id":873,"depth":57,"text":874},{"id":920,"depth":57,"text":921,"children":1976},[1977,1978],{"id":924,"depth":64,"text":925},{"id":959,"depth":64,"text":960},{},{"title":5,"description":999},{"id":1982,"title":1983,"body":1984,"description":2160,"extension":1000,"meta":2161,"navigation":60,"order":57,"path":2162,"seo":2163,"stem":2164,"__hash__":2165},"docs/docs/why-lint-ai-code.md","Why Lint Your AI Code",{"type":7,"value":1985,"toc":2153},[1986,1989,1992,1996,1999,2030,2033,2037,2040,2089,2092,2096,2102,2105,2108,2111,2115,2118,2128,2131,2135,2138,2141,2150],[10,1987,1983],{"id":1988},"why-lint-your-ai-code",[14,1990,1991],{},"AI coding assistants like Cursor, Copilot, and Claude have changed how developers build software. They write code fast, handle boilerplate, and can scaffold entire features in minutes. But speed without quality creates a different kind of technical debt -- one that's harder to spot because the code looks right.",[18,1993,1995],{"id":1994},"the-ai-code-quality-problem","The AI Code Quality Problem",[14,1997,1998],{},"AI-generated code compiles. It runs. It often passes basic tests. But it has patterns that experienced developers would catch in code review:",[431,2000,2001,2006,2012,2018,2024],{},[434,2002,2003,2005],{},[788,2004,1126],{}," sitting in source files instead of environment variables",[434,2007,2008,2011],{},[788,2009,2010],{},"Async functions with no await"," -- marked async out of habit, wrapping return values in unnecessary Promises",[434,2013,2014,2017],{},[788,2015,2016],{},"TODO placeholders"," that look like real implementations but do nothing",[434,2019,2020,2023],{},[788,2021,2022],{},"Fake error handling"," -- catch blocks that swallow errors silently",[434,2025,2026,2029],{},[788,2027,2028],{},"Hallucinated packages"," -- import statements referencing npm packages that don't exist",[14,2031,2032],{},"These aren't edge cases. They're systematic patterns that AI assistants produce because they optimize for \"code that looks correct\" rather than \"code that is correct.\"",[18,2034,2036],{"id":2035},"what-linting-catches","What Linting Catches",[14,2038,2039],{},"LintMyAI organizes its 28 rules into 7 categories, each targeting a specific class of AI-generated code issues:",[431,2041,2042,2048,2054,2060,2066,2072,2078,2084],{},[434,2043,2044,2047],{},[788,2045,2046],{},"Hallucinated Imports"," -- Packages that don't exist on npm, config options that aren't real",[434,2049,2050,2053],{},[788,2051,2052],{},"Security"," -- Hardcoded secrets, placeholder credentials, insecure defaults",[434,2055,2056,2059],{},[788,2057,2058],{},"Dead Code"," -- Empty implementations, unreachable catch blocks, unused parameters",[434,2061,2062,2065],{},[788,2063,2064],{},"AI Behavior"," -- Fake async, excessive comments, hedging comments (\"you may want to adjust this\")",[434,2067,2068,2071],{},[788,2069,2070],{},"Boilerplate"," -- Over-abstraction, verbose conditionals that could be simplified",[434,2073,2074,2077],{},[788,2075,2076],{},"Complexity"," -- Functions that are too long, too deeply nested, or too complex",[434,2079,2080,2083],{},[788,2081,2082],{},"Testing"," -- Missing test files for source modules",[434,2085,2086,2088],{},[788,2087,774],{}," -- React hooks violations, Vue patterns, Express middleware issues",[14,2090,2091],{},"Each category represents a pattern that AI assistants get wrong more frequently than human developers.",[18,2093,2095],{"id":2094},"better-foundation-means-better-ai-output","Better Foundation Means Better AI Output",[14,2097,2098,2099],{},"Here's the insight that makes linting AI code uniquely valuable: ",[788,2100,2101],{},"AI coding assistants work better on clean codebases.",[14,2103,2104],{},"When you ask an AI to add a feature to a project full of dead code, placeholder implementations, and hardcoded secrets, it learns from those patterns. It produces more of the same. The quality degrades with each iteration.",[14,2106,2107],{},"When you lint AI-generated code and fix the issues, you create a cleaner foundation. The next time an AI assistant works on your project, it has better context. Better context means better output. Better output means faster iteration.",[14,2109,2110],{},"Linting isn't just about catching bugs -- it's about maintaining the quality baseline that makes AI-assisted development actually productive over time.",[18,2112,2114],{"id":2113},"zero-config-one-command","Zero Config, One Command",[14,2116,2117],{},"The barrier to linting AI code should be as low as the barrier to generating it. That's why LintMyAI works with a single command:",[39,2119,2120],{"className":162,"code":1062,"language":164,"meta":44,"style":44},[26,2121,2122],{"__ignoreMap":44},[48,2123,2124,2126],{"class":50,"line":51},[48,2125,172],{"class":171},[48,2127,1056],{"class":175},[14,2129,2130],{},"No configuration files. No plugin setup. No framework-specific instructions. It detects your project type, loads the right rules, and reports issues. If you want to customize, you can -- but you don't have to.",[18,2132,2134],{"id":2133},"ai-is-great-linting-makes-it-better","AI Is Great. Linting Makes It Better.",[14,2136,2137],{},"This isn't about replacing AI coding assistants or slowing down development. AI tools are genuinely productive, and the speed they provide is real. Linting is the quality check that makes that speed sustainable.",[14,2139,2140],{},"Think of it like spell-check for AI-generated code. You don't stop writing because spell-check exists -- you write faster because you know it's there to catch mistakes.",[14,2142,2143,796,2146,2149],{},[1204,2144,2145],{"href":1237},"Get started in 60 seconds",[1204,2147,2148],{"href":1206},"browse the full rule list"," to see what LintMyAI catches.",[971,2151,2152],{},"html pre.shiki code .sScJk, html code.shiki .sScJk{--shiki-default:#6F42C1;--shiki-dark:#B392F0}html pre.shiki code .sZZnC, html code.shiki .sZZnC{--shiki-default:#032F62;--shiki-dark:#9ECBFF}html .default .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .shiki span {color: var(--shiki-default);background: var(--shiki-default-bg);font-style: var(--shiki-default-font-style);font-weight: var(--shiki-default-font-weight);text-decoration: var(--shiki-default-text-decoration);}html .dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}html.dark .shiki span {color: var(--shiki-dark);background: var(--shiki-dark-bg);font-style: var(--shiki-dark-font-style);font-weight: var(--shiki-dark-font-weight);text-decoration: var(--shiki-dark-text-decoration);}",{"title":44,"searchDepth":57,"depth":57,"links":2154},[2155,2156,2157,2158,2159],{"id":1994,"depth":57,"text":1995},{"id":2035,"depth":57,"text":2036},{"id":2094,"depth":57,"text":2095},{"id":2113,"depth":57,"text":2114},{"id":2133,"depth":57,"text":2134},"AI coding assistants write code fast, but speed without quality creates technical debt. Learn why linting AI-generated code is essential.",{},"/docs/why-lint-ai-code",{"title":1983,"description":2160},"docs/why-lint-ai-code","NIytksdnHWWw0W9z3beKhXevMMG_oapumwA2P9pq_NE",{"id":2167,"title":1221,"body":2168,"description":2297,"extension":1000,"meta":2298,"navigation":60,"order":64,"path":1220,"seo":2299,"stem":2300,"__hash__":2301},"docs/docs/why-check-ai-code.md",{"type":7,"value":2169,"toc":2290},[2170,2173,2176,2180,2183,2186,2189,2193,2196,2210,2216,2222,2236,2240,2243,2246,2250,2253,2256,2259,2269,2272,2276,2279,2282,2288],[10,2171,1221],{"id":2172},"why-check-ai-generated-code",[14,2174,2175],{},"When a developer writes code, it goes through code review. A colleague reads it, questions assumptions, catches mistakes. When an AI writes code, that review step often disappears. The code goes straight from generation to production, and nobody checks what's actually in it.",[18,2177,2179],{"id":2178},"ai-code-is-not-reviewed-code","AI Code Is Not Reviewed Code",[14,2181,2182],{},"Traditional development has natural checkpoints: pull requests, pair programming, team code reviews. These processes exist because humans make mistakes, and other humans catch them.",[14,2184,2185],{},"AI-generated code bypasses these checkpoints. A developer prompts an AI, gets a response, and if it works -- it ships. The volume of AI-generated code makes manual review impractical. A single developer using AI tools can produce more code in a day than a team could review in a week.",[14,2187,2188],{},"This isn't a theoretical concern. It's the reality of how AI coding tools are used: fast generation, minimal review, rapid deployment.",[18,2190,2192],{"id":2191},"common-ai-code-mistakes","Common AI Code Mistakes",[14,2194,2195],{},"AI coding assistants make specific, predictable categories of mistakes:",[14,2197,2198,2201,2202,2205,2206,2209],{},[788,2199,2200],{},"Security vulnerabilities."," AI frequently embeds secrets directly in source code -- API keys, database passwords, JWT secrets. It uses ",[26,2203,2204],{},"eval()"," for dynamic code execution when safer alternatives exist. It generates placeholder credentials like ",[26,2207,2208],{},"password123"," that look like they're meant to be replaced but often aren't.",[14,2211,2212,2215],{},[788,2213,2214],{},"Hallucinated packages."," AI suggests importing packages that don't exist on npm. These aren't typos -- they're plausible-sounding package names that the AI generates from its training data. A developer who installs them gets an error at best, or a malicious typosquatting package at worst.",[14,2217,2218,2221],{},[788,2219,2220],{},"Dead code patterns."," Empty function bodies, catch blocks that do nothing, parameters that are declared but never used. AI generates these as scaffolding but never fills them in, leaving code that looks complete but isn't.",[14,2223,2224,2227,2228,2231,2232,2235],{},[788,2225,2226],{},"Fake implementations."," Functions marked ",[26,2229,2230],{},"async"," that never ",[26,2233,2234],{},"await"," anything. Error handlers that log but don't recover. Configuration options that reference nonexistent settings. The code structure is correct, but the substance is missing.",[18,2237,2239],{"id":2238},"research-backs-this-up","Research Backs This Up",[14,2241,2242],{},"Studies show that AI-generated code has measurably higher cognitive complexity than human-written code -- 39% higher on average. Higher complexity means more potential for bugs, harder maintenance, and greater risk in production.",[14,2244,2245],{},"This isn't because AI is bad at coding. It's because AI optimizes for generating plausible code, not maintainable code. It doesn't refactor. It doesn't simplify. It produces whatever pattern matches its training data, even when a simpler approach would work better.",[18,2247,2249],{"id":2248},"automated-checking-at-scale","Automated Checking at Scale",[14,2251,2252],{},"Manual code review doesn't scale to the volume of AI-generated code. But automated checking does.",[14,2254,2255],{},"Static analysis can scan thousands of files in seconds, applying consistent rules across every line of code. It doesn't get fatigued. It doesn't miss patterns because it's reviewing the tenth file in a row. It checks every function, every import, every configuration value.",[14,2257,2258],{},"LintMyAI applies 28 rules specifically designed for AI-generated code patterns:",[39,2260,2261],{"className":162,"code":1062,"language":164,"meta":44,"style":44},[26,2262,2263],{"__ignoreMap":44},[48,2264,2265,2267],{"class":50,"line":51},[48,2266,172],{"class":171},[48,2268,1056],{"class":175},[14,2270,2271],{},"It runs in CI pipelines, catches issues before they reach production, and provides clear explanations of what's wrong and why it matters.",[18,2273,2275],{"id":2274},"the-cost-of-not-checking","The Cost of Not Checking",[14,2277,2278],{},"Every unchecked AI-generated file is a potential security incident, a future debugging session, or a piece of technical debt that compounds over time. The cost of checking is one command. The cost of not checking is unpredictable.",[14,2280,2281],{},"Automated code checking isn't about distrusting AI -- it's about applying the same quality standards to AI-generated code that we've always applied to human-written code. Code review exists for a reason. When AI writes the code, automated tools need to fill the review gap.",[14,2283,2284,2287],{},[1204,2285,2286],{"href":1237},"Get started with LintMyAI"," and add automated AI code checking to your workflow in under 60 seconds.",[971,2289,2152],{},{"title":44,"searchDepth":57,"depth":57,"links":2291},[2292,2293,2294,2295,2296],{"id":2178,"depth":57,"text":2179},{"id":2191,"depth":57,"text":2192},{"id":2238,"depth":57,"text":2239},{"id":2248,"depth":57,"text":2249},{"id":2274,"depth":57,"text":2275},"AI-generated code needs verification. Learn about the common patterns AI gets wrong and how automated checking catches them.",{},{"title":1221,"description":2297},"docs/why-check-ai-code","3HACaTWjumGqgRGYkdjdxhyDc3X01vuCU_jJFDvvWUs",1773394827143]