write-good is a linter for English prose, a writing checker if you will.

A quick example of its library usage, from README:

var writeGood = require('write-good');

var suggestions = writeGood('So the cat was stolen.');

The suggestions would be:

[{
  suggestion: "omit 'So' from the beginning of sentences",
  index: 0, offset: 2
}, {
  suggestion: "'was stolen' is passive voice",
  index: 11, offset: 10
}]

You can see write-good makes two suggestions, in descriptive text, explaining how you can improve, also provide the starting index of character and the length offset of the context position in the input text.

It also has CLI and could process Markdown directly:

$ write-good *.md

In README.md
=============
 = writeGood('So the cat was stolen.');
                         ^^^^^^^^^^
"was stolen" is passive voice on line 20 at column 40
-------------
//   suggestion: "'was stolen' is passive voice",
                   ^^^^^^^^^^
"was stolen" is passive voice on line 28 at column 19

Like many programming language linter, it has options to choose what types of checks you want to perform. They are four check at this moment:

passive
Checks for passive voice.
illusion
Checks for lexical illusions – cases where a word is repeated.
so
Checks for so at the beginning of the sentence.
weasel
Checks for “weasel words.”

Truth to be told, I didn’t run this library since I don’t have any JavaScript engine besides ones within web browsers. I like this and would like to have it to work with my b.py if there is a Python implementation. It’d be a big plus for having a language linter for writing blog posts.

write-good is written by Brian Ford under the MIT License, currently post v0.5.0 (2014-04-27).