Check style and terminology
Topicary lints your topics against your own Vale style rules while you write. Matching text is underlined in the editor, grouped by rule in the **Style** panel, and summarized into the AI prompt so generated drafts come out pre-compliant.
Style linting is available on every plan, including Free. Only the project owner can edit the style pack or mute a rule; every other member sees the findings.
This is Vale-compatible, not embedded Vale. Six of Vale's rule types run in your browser. The four that need a part-of-speech tagger, a dictionary, or a numeric parser are listed as deferred instead of being silently dropped. See "Which Vale rule types run" below.
Set up a style pack
Go to Settings ▸ Content & AI and find the Style pack (Vale-compatible) card.
Select Enable style linting for this project.
Paste the contents of your
.vale.inifile into the .vale.ini field.Under Style files, click Add style file. Enter the path exactly as Vale sees it, for example
MyStyle/Terms.yml, then paste that file's YAML into the box below the path.Repeat step 4 for every style file your config references.
Click Save AI settings.
There is no file upload and no repository connection. You paste the same text Vale reads from disk.
Only the project owner can save these settings. Everyone else sees the whole section read-only: a banner reading "Only the project owner can change these settings. You can read the project style rules, glossary, and style pack here, but not edit them.", every field disabled, the Save AI settings button disabled, and the Add buttons hidden. Ask the owner to make the change.
From your .vale.ini, Topicary reads StylesPath (stripped when deriving rule names), MinAlertLevel (findings below it are filtered out; the default is suggestion), and each [format] section, including BasedOnStyles and per-rule overrides such as MyStyle.Terms = error or MyStyle.Terms = NO.
An empty .vale.ini is valid and means lenient mode: every style file you add is treated as active. It is the fastest way to try a single rule file before porting your whole config.
The pack is stored as raw text and compiled in your browser. Compiled rules never leave the browser, so a change takes effect as soon as the editor reloads the pack.
Review style findings in a topic
Open a topic in the editor.
Open the Style tab in the right sidebar. Its badge counts the errors and warnings in the current topic, so a topic with only suggestions carries no badge.
Read the counts at the top of the panel, which break the findings down into errors, warnings, and suggestions.
Findings are grouped by rule, listed under the rule's short name with its own error and warning counts. A rule that raised only suggestions shows its total instead. Click a group to collapse or expand it.
Click a finding to jump to the matching text and open its suggestion card.
The check re-runs automatically half a second after you stop typing. Click Run style check to run it on demand.
What the panel shows | What it means |
|---|---|
Passes style | The topic matches your pack. Nothing to fix. |
No style pack configured | No pack is saved yet, the pack is disabled, or it holds no style files. Set one up in Settings ▸ Content & AI. |
"This topic is too large to lint in the editor. Split it, or run the full check at publish time." | The topic is over the size limits in the table below. Split it into smaller topics. |
"N rules could not be loaded" | Rules Topicary could not read, because the style file is broken. Expanded by default. Each line names the rule, its file, and what is wrong. |
"N rules deferred to full Vale" | Well-formed rules whose type this engine does not run. Collapsed by default. Expand to see each one with its type. |
"Muted rules (N)" | Rules muted for the whole project. Expand to unmute. |
"N dismissed in this topic" | Findings you hid one at a time. Click Restore to bring them all back. |
Findings whose Vale rule defines a link show a docs link next to the message, pointing at your own style guide.
Fix a finding
Click an underlined phrase in the editor. Hovering only tints the underline; the card opens on click and stays pinned until you press Esc, click outside it, or choose an action.
Read the card. It leads with the severity and rule name, then the rule's message, then a Rule docs link when the rule has one.
Choose an action:
Replace with "…": applies the fix in one click. This button appears only for rules that produce a replacement, which are the substitution, consistency, and capitalization types.
Dismiss: hides the finding in this topic. Dismissal matches on the rule plus the exact text that was flagged, so every identical match of that rule in the topic goes with it.
Mute this rule in this project: stops the rule flagging anywhere in the project.
Two things can stop a quick fix, and the card says which one applied:
Situation | Message on the card |
|---|---|
Suggest mode is on, so edits are tracked instead of applied | "Turn off suggest mode to apply style fixes." |
The text moved or changed since the finding was raised | "The text changed — dismissing this suggestion." |
With suggest mode on, the underlines stay on screen. They are advisory, so you can keep reading the findings and fix the text by hand. See Track changes and suggestions for how suggest mode works.
Read-only topics work differently. When a topic is read-only, because of its workflow stage or because you are viewing an old version, live linting stops: the underlines and any open card clear, and no new check runs while you type. The findings are still reachable. Open the Style tab and click Run style check, which lists them without offering fixes.
Mute a rule for the whole project
In the Style panel, expand the rule's group, or open any of its findings in the editor.
Click Mute this rule in this project.
Muting silences the rule in three places at once: the editor underlines, the Style panel, and the summary sent to the AI. Muted rules stay listed under Muted rules (N) at the bottom of the panel, so suppression is never invisible. Click Unmute to bring a rule back. A muted rule that your pack no longer defines is marked (not in the current pack).
Action | Scope | How to undo it |
|---|---|---|
Dismiss | Every identical match of that rule, in this topic, in this browser | Restore, next to the "N dismissed in this topic" count |
Mute this rule in this project | Every topic in the project, for every member | Unmute, under Muted rules (N) |
Only the project owner can mute or unmute a rule. For everyone else the mute action is hidden rather than shown and disabled. If you need a rule muted, ask the owner.
Which Vale rule types run
Rule type ( | In the editor |
|---|---|
| Runs |
| Runs |
| Runs |
| Runs |
| Runs |
| Runs |
| Deferred to the full Vale check |
| Deferred to the full Vale check |
| Deferred to the full Vale check |
| Deferred to the full Vale check |
The six supported types run the same regular-expression operations Vale runs, with the same ignorecase, level, message, and link semantics. The four deferred types need a part-of-speech tagger, a spelling dictionary, or a numeric parser, so Topicary refuses to half-run them. It keeps them in your config and lists them in the panel with the reason "runs in the full-Vale check (roadmap)".
A rule that fails to load is reported separately, as an error rather than a deferral. The Style panel lists those under N rules could not be loaded, expanded by default, with the rule name, the style file it came from, and the reason, for example invalid YAML, not a valid Vale rule document, unknown rule type "existance" — check the extends field, no extends field — every Vale rule needs one, or a missing required field such as existence rule has no tokens or substitution rule has no swap map. The section ends with "Fix these files in Settings, under Content and AI. They are not waiting on anything here."
Nothing in that list is waiting on a roadmap item. Vale has exactly ten rule types, so an extends value Topicary does not recognize is a typo in your file, not a type it has yet to support. Open the named file in Settings > Content & AI and correct it.
Three more behaviors worth knowing:
scopeis honored coarsely. A scope beginning withheading, including a finer selector such asheading.h2, restricts the rule to every heading block. Every other scope value,sentenceandrawincluded, runs the rule over all prose blocks. No rule is skipped for its scope, so a narrow selector matches more text here than it does in Vale.Capitalization rules default to headings. A
capitalizationrule with noscopechecks heading blocks only, which matches the usual Vale house style. Give it a scope that does not begin withheadingto run it over all prose. The$titlematch uses a pragmatic list of small words rather than Vale's full title-casing library, so a few unusual titles can differ.Code is never linted. Code blocks and inline code are stripped before matching, so a banned word inside a command stays untouched.
AI drafts follow your style pack
Your pack is summarized into the system prompt for every AI writing surface: Draft content with AI, Inline AI editing, the selection-toolbar actions, and the AI chat panel. Generated text starts compliant instead of being corrected afterwards. The summary carries preferred terms, words to avoid, "pick one" pairs, and heading capitalization, and it caps at 1,200 characters. Muted rules are excluded from it, because a rule the project does not enforce should not steer the model.
Glossary terms and freeform style rules on the same settings page are sent alongside the pack. They cover different ground: the glossary sets preferred forms, and the pack enforces them as you type.
Limits
Limit | Value |
|---|---|
Style files per project | 100 |
Total size of the style config | 500,000 characters |
Rules executed in the browser | 200 (extra rules stay in the config but do not run) |
Muted rules per project | 500 |
Topic size before linting stops | 2,000 blocks or 500,000 characters |
Delay before a re-check | 0.5 seconds after your last keystroke |
Freeform style rules on the same page | 20 |
Glossary terms on the same page | 200 |
Saving a pack over the file or size limit fails with "Maximum 100 style files." or "Style config is too large." Nothing is written until the config fits.
See also
Draft content with AI: generation that already follows your pack
Inline AI editing: rewriting in place, and why suggest mode pauses it
Track changes and suggestions: why style fixes cannot apply while suggesting is on
Content health and governance: quality findings, which are separate from style findings
Plans and limits: which capabilities each plan includes