Business email

A business email asks the reader for one thing, and gets an answer. chaff finds by machine the softeners that pile up when you try to be polite, and the blanks you forgot to fill before sending. The genre is business/email. Letters are checked under the same genre.

What usually goes wrong

The harder an email tries to be polite, the deeper the request sinks into it.

What goes wrongExample
A sentence too long to follow“I just wanted to reach out because I was wondering if it might perhaps be possible…”
Hedges stacked in one sentence“might perhaps be possible”
A weekday that is wrong“Friday, October 10, 2026” falls on a Saturday
A blank left inThe template’s “[Your Name]” was never filled in

The last one cannot be taken back once it is sent.

What chaff checks, and what it does not

These are the main rules for this genre.

RuleWhat it findsWhen it runs
max-sentence-lengthA sentence that runs too long (18 words for this genre)Always (info)
excessive-hedgingHedges stacked until nobody is saying anythingAlways
cushion-phrase-densitySofteners (“just wanted to”, “sorry to bother”) too dense for the lengthAlways (info)
date-weekday-mismatchA date whose weekday disagrees with the calendarAlways
unfilled-placeholderA template blank such as “[Your Name]”Always
risk-disclosureA text that gives only the upside and never what to watch forWhen an AI reads it, with npx chaffjs test

What it does not do is decided too.

  • It does not check names or addresses. Whether “Ms Yamada” is right is for the sender to check.
  • It does not check the weekday of a date when no date in the document gives a year, since the year is unknown. When one does, a date without its year is read in the year that puts it within five months of that dated date, and its weekday is checked.
  • It does not check whether the attachment is there. chaff reads only the text.
  • It does not decide whether the tone suits the reader. It marks where hedges pile up.

Try it

If you have not set up yet, do Getting ready first. The email was pasted into a text editor and saved as email.md.

Subject: Meeting to discuss the website redesign

Dear Ms Yamada,

I hope this email finds you well. Thank you again for taking the time to meet with us last week.

I just wanted to reach out because I was wondering if it might perhaps be possible for us to find some time to go through the redesign proposal with you and your team in a little more detail, if that would not be too much trouble.

Sorry to bother you, but would any of the following times work for you?

- Tuesday, October 6, 2026, at 2 pm
- Thursday, October 8, 2026, at 10 am
- Friday, October 10, 2026, at 4 pm

I've attached the slides from our last meeting. If you have any questions, please contact [Your Name] at any time.

Please don't hesitate to let me know if there is anything else I can do. I hope this helps!

Best regards,
Sasaki

Run without a genre, chaff sees “Subject:” on the first line and suggests the email genre. --compact prints each finding on two lines.

$ npx chaffjs email.md --compact

email.md   blog/tech · English   genre from the default
   Looks like: Email and letter. Try --genre business/email

  7:1     info    This sentence runs 46 words (limit 40)
                  max-sentence-length
  7:58    warning This sentence stacks 2 hedges ("might, perhaps")
                  excessive-hedging
  13:11   error   October 10, 2026 is a Saturday, not a Friday
                  date-weekday-mismatch
  15:91   warning "[Your Name]" was never filled in
                  unfilled-placeholder
  17:74   warning Closes with "hope this helps"
                  closing-cliche

5 findings, 71 rules not run

Read as a tech blog, the sentence limit is a blog’s, and the softeners are not counted. Add the genre, as suggested.

$ npx chaffjs email.md --genre business/email --compact

email.md   business/email · English   genre from --genre

  5:1     info    "hope this email finds you well" and other softeners: 26 per 1000 words (limit 5)
                  cushion-phrase-density
  7:1     info    "just wanted to" and other softeners: 26 per 1000 words (limit 5)
                  cushion-phrase-density
  7:1     info    "i was wondering if" and other softeners: 26 per 1000 words (limit 5)
                  cushion-phrase-density
  7:1     info    This sentence runs 46 words (limit 18)
                  max-sentence-length
  7:58    warning This sentence stacks 2 hedges ("might, perhaps")
                  excessive-hedging
  9:1     info    "sorry to bother" and other softeners: 26 per 1000 words (limit 5)
                  cushion-phrase-density
  13:11   error   October 10, 2026 is a Saturday, not a Friday
                  date-weekday-mismatch
  15:1    warning An attachment is mentioned, but no attachment line or file name is shown
                  attachment-not-attached
  15:91   warning "[Your Name]" was never filled in
                  unfilled-placeholder

9 findings, 85 rules not run

info is information you may skip; it never fails a run. These rules report on many emails people write too, so they report at that level.

The guide that comes first

With the genre set, chaff opens the report with the genre’s guide: what a good business email does, as questions to check the draft against. Under them is a line naming the rules that matter most for this genre. Most of the questions are ones no rule can answer, so read them before the findings. An AI that rewrites the text works to the same lines (Using the guide with an AI).

$ npx chaffjs email.md --genre business/email

Guide: Email and letter (business/email)

  Before the findings below, check the draft against these.

  - Do the subject and the first two lines give the purpose and what the reader should do?
  - Does each request have a deadline (a date, not "soon")?
  - Is everything said to be attached actually attached?
  - Are the greeting, the closing and the signature in place?

  Rules that matter most for this genre: attachment-not-attached, concrete-evidence-density, cushion-phrase-density, email-greeting-closing, email-subject-length, request-without-deadline, risk-disclosure, unsourced-number
  Change it with guide: in chaff.yaml; leave it out with --no-guide.

════════════════════════════════════════════════════════════

email.md   business/email · English   genre from --genre
…

A genre that was guessed from the path or the content, or left at the default, prints no guide. A guide for the wrong kind of document would mislead. --compact and --no-guide leave it out. A team changes the lines with guide: in chaff.yaml (Changing the genre’s guide).

What each finding means

LineFindingWhat it meansHow to fix it
5, 7, 9cushion-phrase-densityFour softeners in one short email; each pushes the request further backKeep one courtesy at most, and ask plainly
7max-sentence-lengthOne sentence of 46 words; the request comes only at the very endLead with the request, and split the rest off: “Could we meet to go through the redesign proposal?”
7excessive-hedging“might” and “perhaps” in one sentenceKeep one hedge at most, or ask plainly
13date-weekday-mismatchOctober 10, 2026 is a SaturdayFix the weekday, or the date. The other two times are right
15unfilled-placeholderThe template blank is still therePut in the real name. Fix this one before sending, whatever else you leave

Without a genre, chaff also flagged “I hope this helps!” as a stock closing. That rule is not used for business documents, so it does not run under the email genre.

Checks that read meaning go to an AI

npx chaffjs test can have an AI read whether the email leaves out something to watch for. npx chaffjs test email.md --genre business/email --dry-run says 1 passage would be sent. For an email that only asks for a meeting, nothing to watch for may be fine. Read the AI’s answer and decide.

A starter chaff.yaml

Put this chaff.yaml in the folder where you draft emails.

genre: business/email
language: en

With this file in place, npx chaffjs email.md --compact alone shows all the findings above, without --genre each time.