Skip to content

Policies

Soul is probabilistic. You can put “I don’t write in second person” into Soul as an allergy, and the LLM will try. It might slip.

Policies exist for the rules where “try” is not enough. A policy is a deterministic check on Sadie’s output. It always runs, it always matches the same way, and it does something specific when it matches.

  • Phrase. A literal string, matched case-insensitively. Good for concrete tokens: “em-dash,” “synergy,” a specific cliche.
  • Regex. A trusted regex pattern. Accepts either raw form (pattern) or delimited form (/pattern/flags); the global flag is forced on. Good for structural rules: “no paragraphs that begin with ‘I apologize’.”
  • Semantic. A plain-English rule evaluated by an LLM judge. Good for things regex cannot see: negation framing, false certainty, tonal shifts. The judge receives the rule plus the candidate text and returns a JSON verdict with an optional rewrite.
  • Rewrite mutates the text. For phrase and regex, uses your replacement. For semantic, uses the rewrite field returned by the judge.
  • Block fails the whole output. In Chat, this substitutes an apology message and forces the emotion to serious. In Brief, this suppresses the brief entirely; the compiler logs a dismissed activity instead.
  • Warn records the violation and leaves the text alone. Useful when you want to measure drift without intervening.

Every policy picks any subset of chat, studio, brief. Scopes are isolating, not cumulative: a policy scoped only to chat does not run in Studio, even if the pattern would match.

Studio is record-only regardless of action. Your writing surface is your space.

The Policies view has a Quick add panel with five curated presets:

  • No em-dashes (phrase, rewrite) replaces every em-dash with a space-hyphen-space. The product itself uses this. See the example.
  • No en-dashes (phrase, rewrite).
  • No negation framing (semantic, rewrite). Rewrites constructions like “not X, but Y” to state the positive claim directly.
  • No AI openers (regex, rewrite). Strips tired phrases like “in today’s fast-paced world” and “delve into.”
  • No servile openers (regex, rewrite, chat only). Drops leading apologies.

Each is one click to add. Presets that already exist auto-hide.

{
label: "No emdashes",
kind: "phrase",
pattern: "\u2014", // em-dash character
replacement: " - ", // space-hyphen-space
action: "rewrite",
scopes: ["chat", "studio", "brief"],
}

Both address “I don’t want Sadie to do that.” The difference is enforcement:

  • Soul allergies are soft, prompt-level, LLM-attended. They shape the output probabilistically.
  • Policies are hard, deterministic, post-hoc (and in chat, prompt-injected as a guardrail so the LLM tries to comply upstream too).

Put behavioral aversions in Soul. Put unconditional bans in Policies. The two are meant to complement each other.