3. Your first restate
Where you are
Section titled “Where you are”You have seen the rules go out and a report come back. The next miss is one Vale cannot see.
Reject a reply
Section titled “Reject a reply”Ask the agent to explain some part of your project. When the reply uses a term it never defined, or ends a paragraph with a flourish, or buries the answer in the third paragraph, reject it:
/just-say-so:restate #undefined-term it used "pin" three times and never said what a pin isThe model rewrites the reply under the rules. It keeps every fact, number, path, and code block and changes only the prose. It does not apologise or explain the change.
What was recorded
Section titled “What was recorded”The plugin read the rejected reply from the transcript, so the record holds what the model wrote and not what it remembers writing. It saved one line to rejections.jsonl in your state directory, which for an installed plugin is $CLAUDE_PLUGIN_DATA/state and otherwise ~/.local/state/just-say-so/ unless JUST_SAY_SO_STATE_DIR or XDG_STATE_HOME moves it, with the rejected reply, your reason as typed, the tag undefined-term, the prompt that produced the reply, and the Vale alerts on the rejected text at every level. When the rewrite landed, it joined the record with its own alerts.
Nothing was written into the project. Nothing leaves your machine.
Why the tag matters
Section titled “Why the tag matters”A tag is any #word you type. There is no list. The summary counts tags, and when a tag is the id of a bullet in the rules file, the summary knows whether that bullet is a judgment bullet or a Vale-backed one and whether its rules fired. A tag that matches no bullet is the to-do list: a bullet or a rule still to write. Pick a few tags and reuse them; three rejections with one tag in one project is what advice needs.
/just-say-so:summaryThe Tags section reads undefined-term: 1 · no bullet covers it yet, and Rejections given shows your reason.
Block errors in files, keep replies on warn: the first setting you change.