ArrayKit

System Prompt Linter

Find contradictions, dead instructions and unfilled placeholders in a prompt.

System Prompt Linter

Find contradictions, dead instructions and unfilled placeholders in a prompt.

System prompts are among the most sensitive text a team writes. Everything is analysed in the browser and nothing is uploaded.

Compare it with the previous version

About System Prompt Linter

Whether a prompt is good is not decidable from the text. Whether it argues with itself is. These checks are deliberately about mechanics: an instruction to produce JSON with no description of the JSON, a length instruction with no length in it, a placeholder still sitting unfilled, a phrase both required in one sentence and forbidden in another. Every finding points at the span it came from, because a lint result you cannot locate is just an opinion. Some of the rules are about cost rather than correctness — sustained capitals and pleading add tokens to every request without changing what comes back.

Features

  • Contradictions, where the same thing is both required and ruled out
  • Requests for JSON with no shape described anywhere
  • Length instructions with no number in them
  • Template placeholders left unfilled, reported as errors
  • XML-style tags opened and never closed
  • Instructions not to reason, which tend to backfire
  • Every finding points at the exact text it matched
  • A score that weights errors above notes

How to use the System Prompt Linter

  1. Paste the system prompt
  2. Read the findings, errors first
  3. Fix the contradictions — those are the ones that change behaviour
  4. Re-check as you edit

Example

Input

Always include the order number. Never include the order number if unverified.

Output

Possible contradiction: “the order number” is both asked for and ruled out

An absolute plus a conditional exception is the usual shape.

Common errors & troubleshooting

  • It flags a contradiction that is intentional. — A rule with an exception often reads as one. If the exception is deliberate, phrase the first instruction conditionally too so the precedence is explicit.
  • It complains about JSON when I do describe the shape. — The check looks for a visible key or a schema. If yours is described in prose, showing a small example is clearer anyway.
  • It flags “always” and “never”. — Only as notes. Absolutes are easy to write and hard to satisfy, and they are the usual source of a prompt contradicting itself further down.
  • A long prompt is flagged. — Length is not an error. The note exists because the middle of a long prompt is where instructions get lost — the non-negotiable ones belong at the start or the end.

Frequently asked questions

Will fixing everything make the prompt good?
No. These are mechanical checks — contradictions, missing formats, dead markers. Whether the instructions are the right ones is a judgement about your task that no linter makes.
Why is “do not think” flagged?
Instructions to skip reasoning tend to make output worse rather than shorter, and on current models they can push reasoning into the visible answer instead of suppressing it. Asking for a shorter answer is the instruction that actually works.
Why does it care about capitals?
Sustained capitals do not carry the emphasis they do for a human reader, and they cost more tokens than the same words in lower case. It is a note, not an error.
How does the contradiction check work?
It looks for the same noun phrase appearing both in something required and in something forbidden, including a qualified version of it. It is deliberately narrow, so it misses subtle conflicts rather than flooding you with false ones.
Does it work on any prompt?
It is written for instruction-shaped text — system prompts, tool descriptions, skill bodies. Running it over ordinary prose will produce notes that do not mean much.

Related tools

More AI & Agents tools

See all AI & Agents tools · All tools