{
  "slug": "prose-linter",
  "name": "gizza-ai/prose-linter",
  "version": "0.1.0",
  "title": "Prose Linter — Clichés, Weasel Words, Passive Voice — gizza.ai",
  "description": "Paste English prose and flag clichés, weasel words, passive voice, redundancies, jargon, long sentences, and repeated words locally in your browser.",
  "tags": [
    "writing",
    "prose",
    "linter",
    "style",
    "editing",
    "passive voice",
    "cliche"
  ],
  "category": "text",
  "urls": {
    "page": "https://gizza.ai/tools/prose-linter/",
    "markdown": "https://gizza.ai/tools/prose-linter/index.md",
    "descriptor": "https://gizza.ai/tools/prose-linter/tool.json",
    "deep_link_example": "https://gizza.ai/tools/prose-linter/?text=So%20the%20proposal%20was%20written%20at%20the%20end%20of%20the%20day%2C%20and%20it%20is%20very%20innovative.&checks=all&output=report&ignore=very%2C%20touch%20base&max_issues=200&long_sentence_words=30"
  },
  "cli": "gizza tool prose-linter \"So the proposal was written at the end of the day, and it is very innovative.\"",
  "tool": {
    "description": "Lint English prose against an embedded style rule set and return every finding with its line, column, rule and a plain-English fix. Rules: cliche (tired stock phrases), weasel (vague quantifiers like 'very' or 'a number of'), adverb (filler adverbs such as 'basically' or 'literally'), hedge (backing away from a claim, e.g. 'I think', 'sort of'), jargon (corporate speak such as 'leverage' or 'circle back', with the plain word to use), wordy (long-winded phrases such as 'in order to' → 'to'), redundancy (saying it twice, e.g. 'free gift' → 'gift'), passive (a form of 'to be' plus a past participle, including irregular ones), there-is (sentences opening with 'There is/are'), so-start (sentences opening with 'So'), illusion (a word accidentally repeated twice in a row), long-sentence (sentences over a configurable word count), and the opt-in eprime rule (every form of 'to be'). Options: checks (comma list; 'all', '-name' to disable, 'eprime' to add), output (report, annotated or json), ignore (allow-list of phrases), max_issues and long_sentence_words. Fully local, deterministic and offline — no AI model, no spelling or grammar checking, English only.",
    "parameters": {
      "additionalProperties": false,
      "properties": {
        "checks": {
          "default": "all",
          "description": "Which rules to run, comma-separated. 'all' (default) runs adverb, cliche, hedge, illusion, jargon, long-sentence, passive, redundancy, so-start, there-is, weasel and wordy. Prefix a name with '-' to switch it off, e.g. 'all,-passive'. Name rules directly to run only those, e.g. 'cliche,weasel'. 'eprime' (flags every form of 'to be') is opt-in and never part of 'all' — ask for it by name, e.g. 'all,eprime'. 'none' clears the list.",
          "type": "string"
        },
        "ignore": {
          "default": "",
          "description": "Comma-separated words or phrases to never flag, for terms your style guide allows — e.g. 'very, touch base'. Matching is case-insensitive and compares the whole matched phrase. Empty by default, which flags everything.",
          "type": "string"
        },
        "long_sentence_words": {
          "default": 30,
          "description": "Flag any sentence longer than this many words with the long-sentence rule (0 = never flag sentence length). Default 30.",
          "maximum": 200,
          "minimum": 0,
          "type": "integer"
        },
        "max_issues": {
          "default": 200,
          "description": "Maximum number of issues to list (0 = list them all). The total count is always reported even when the list is truncated. Default 200.",
          "maximum": 10000,
          "minimum": 0,
          "type": "integer"
        },
        "output": {
          "default": "report",
          "description": "Report shape: report (aligned line:col / rule / issue table plus per-rule counts), annotated (each offending line reprinted with carets under the exact match) or json (the same findings as a machine-readable object with byte-accurate line, col, rule, message, match and suggestion). Default report.",
          "enum": [
            "report",
            "annotated",
            "json"
          ],
          "type": "string"
        },
        "text": {
          "description": "The English prose to lint. Paste plain text, Markdown or a draft — e.g. 'So the cat was stolen at the end of the day.' Maximum 1000000 bytes.",
          "type": "string"
        }
      },
      "required": [
        "text"
      ],
      "type": "object"
    }
  }
}