Skip to content

Getting started

This page installs just-say-so and runs one session. You will see a file check, the rules in the agent’s context, a reply report, and a restate. It takes about fifteen minutes.

You need three things.

  • node 18 or newer. The plugin has no npm dependencies.
  • vale on your PATH: brew install vale, or another installer from vale.sh. A different tool, an STE linter, also installs a binary named vale. This plugin needs errata-ai vale, the one brew installs. If you have both, put errata-ai’s first on PATH.
  • Claude Code 2.1.85 or newer.

Without vale, the rules still inject and the checks skip. Session start says so once.

In Claude Code:

/plugin marketplace add ifandelse/just-say-so
/plugin install just-say-so@just-say-so

Open a project and run:

/just-say-so:init

The skill asks which targets you want checked beyond the defaults, then runs the setup. It writes a .vale.ini that loads the JustSaySo rules when the project has none, runs vale sync, writes .just-say-so.json for any target you named, wires a commit hook for the repo’s hook tooling, and ends with the doctor report. Add --dry-run to see the steps without writing anything.

/just-say-so:doctor

A clean report ends with No warnings. and shows, per target, which rules are on:

Targets (the plugin's reading of the Vale config: rules on per style, then how many of those sit at each level)
reply reply.reply JustSaySo 6 of 6 rules on · levels: 5 error, 1 suggestion
sections: [*] [*.reply]
files .md doc.md JustSaySo 6 of 6 rules on · levels: 5 error, 1 suggestion
sections: [*]

Each warning names its fix. Read them before going on.

4. Start a session and watch the rules arrive

Section titled “4. Start a session and watch the rules arrive”

Start a new session in the project. The rules text goes out at every context start. You do not see it, but the agent does. To see it yourself, run:

/just-say-so:rules

That loads the full text into the conversation, as the manifest renders it. The hooks inject the same text with one difference: a bullet backed by Vale rules your project turned off is left out. On a fresh setup nothing is turned off, so the two match. It opens with “Lead with the answer, decision, result, or required action.”

Ask the agent to write a short Markdown file. Ask for something a buzzword fits, a rollout note say. When the write lands, the agent gets a report of every alert on the lines it added, and in the default warn mode it is told to fix the errors before finishing. You see the fixed file. To see the report itself, ask the agent what the check said.

Ask a question, and when the reply is bad in a way you noticed, reject it:

/just-say-so:restate #undefined-term what is a "pin"? the term was never defined

The model rewrites the reply under the rules. The plugin saves the rejected reply as the model wrote it, your reason, the tag, and the rewrite, as one line in a file under your state directory. Nothing leaves your machine. A tag is any #word you type.

/just-say-so:summary

It prints facts with their counts: turns, rejections per 100 turns, the rules that fired, the tags and what each points at. After one session most lines read zero. The numbers mean something after a week.

The agent writes under your rules, the files it writes are checked, and the misses you notice are on record. From here: