no-obvious
skill CLI MCP npm install

Cut the sentences that say nothing.

Model prose fails quietly. It frames a claim, pads it, hedges it, then closes with a summary of the paragraph above. noobvious is a skill that teaches an agent twelve tells to catch that in its own draft, plus three tests to decide what stays.

npm i @qexle/noobvious && npx skills experimental_sync -y
  • 12tells the agent reads
  • 3tests per sentence
  • 38rules the checker runs
specimen.md marked by the skill

Version.

the label names its own field

qany is at v0.3.0.

says it twice

The CLI and MCP interfaces may change before 1.0.

would sit in any README

after the cut

Version 0.3.0. Command and tool names can change until 1.0.

keep this
red pen: the tell blue pencil: what survived

The tells

Twelve shapes. The agent reads its own draft against them.

three tests, one sentence at a time

  1. What did the reader learn from this sentence?
  2. Could this sentence sit in someone else's README?
  3. Does the label say anything the value does not already say?

A sentence that fails any of them goes. A tutorial, a safety notice, and an API reference keep the repeats they need.

The mechanical pass

Thirty-eight rules with a fixed shape. The checker runs offline, on your machine, with no model in the loop.
family shape fix
frame a wrapper around a clause that already carries the claim cut the frame, keep the clause: it is important to note that
opener throat-clearing before the content starts start with the content: let's dive into
closing a summary marker that repeats the text above it delete the marker: in conclusion
claim a claim nobody sourced name the source: it is widely believed that
redundant a word group that says less than the plain version use the short form: in order to, due to the fact that
hedge stacked qualifiers on one verb keep one: could possibly
repeat two sentences or phrases carrying the same content say it once: a list item that restates the list above it

A run

Six of the twelve findings from a real run.
sample.md
3:19 error  frame.important_note   Cut the frame and keep the clause.
7:1 warning opener.lets_dive   Start with the content.
9:1 error  claim.widely_believed  Name the source, or state it as fact if it is one.
11:1 warning redundant.in_order_to  Replace with "to".
13:27 error  repeat.adjacent_sentence  Delete one of the two sentences.
17:1 error  closing.conclusion_marker  Delete the marker, or delete the sentence when it repeats.
6 errors, 6 warnings in 1 file (98 words)

Exit code 1 when a file has an error, so the check drops into a pipeline. --json gives the same findings as data, and --strict fails the run on warnings too.

Install

Node 20.10 or newer. Bun works the same way.

install the skill

npm i @qexle/noobvious
npx skills experimental_sync -y

The sync command finds the bundled skill in node_modules and installs it into the agents on the machine. The skill ends by shelling out to the checker, so install the package globally too: npm install -g @qexle/noobvious.

run the checker

npx @qexle/noobvious README.md

Add --stdin to read a draft from a pipe, or point it at a folder of markdown. The checker catches the phrase-level tells on its own and cannot judge meaning.

run it as a server

{
  "mcp": {
    "servers": {
      "noobvious": {
        "command": "npx",
        "args": ["-y", "@qexle/noobvious", "mcp"]
      }
    }
  }
}

What it cannot do