@noctcore/eslint-plugin-llm
v0.1.2
Published
ESLint rules for code that calls LLM SDKs: model output treated as untrusted input before it reaches a dangerous sink.
Maintainers
Readme
@noctcore/eslint-plugin-llm
Rules for code that calls LLM SDKs (OpenAI, Anthropic, the Vercel AI SDK): model output is untrusted input, and these rules catch it reaching a sink before anything checked it. Syntactic, no type information.
Docs: noctcore.github.io/eslint-plugins/packages/llm
Not a good fit for code that calls models through its own wrapper everywhere, because the rules recognise the SDKs' own response shapes.
Requirements
- ESLint 9 or newer, flat config (
eslint.config.js) only. configs.recommendedregisters the plugin and sets rule severities, nothing else. It sets nofilesand no parser, so it applies to whatever files the rest of your config lints. To lint TypeScript, add afilespattern and@typescript-eslint/parser, as in the quick start.
Install
bun add -D @noctcore/eslint-plugin-llm @typescript-eslint/parser # or npm i -D / pnpm add -DQuick start
// eslint.config.js
import tsParser from '@typescript-eslint/parser';
import llm from '@noctcore/eslint-plugin-llm';
export default [
{
...llm.configs.recommended,
files: ['**/*.{ts,tsx}'],
languageOptions: { parser: tsParser },
},
];Rules
✅ on in recommended (error) · 🔘 opt-in: not on in recommended, enable it yourself · ⚙️ needs options · 🔧 --fix · 💡 suggestions · 💭 needs type info · ❌ deprecated
| Rule | Description | Preset | ⚙️ | 🔧 | 💡 | 💭 |
| --- | --- | :-: | :-: | :-: | :-: | :-: |
| no-llm-output-to-sink | Text an LLM SDK call returned must not reach eval, a shell, raw SQL, HTML injection, a fetch origin or an fs path in the same function without being validated or sanitized first. | ✅ | | | | |
Severity policy
Every rule is error or off, never warn: a warning is a rule nobody obeys. See the
severity policy.
