Skip to main content
A rule is a standing instruction rather than something you invoke. Put one at .seri/rules/<name>.mdc for this project, or under your profile root for every project. The extension is .mdc, which is the only name a rule has.

When a rule loads

Frontmatter decides it, and there are exactly three outcomes. A file setting both globs and alwaysApply: true is always-on and is never also injected per touch. alwaysApply wins.

How a glob rule arrives

The rule stays out of the prompt until a read_file or write_file lands on a matching path. Then it arrives as a note in the conversation, once per session rather than once per file. Matching a read_file is deliberate. It puts the rule in front of the model before it composes the edit, rather than after. The rule text never enters the system prompt mid-session. That string is frozen when the session starts, and keeping it frozen is what lets a provider reuse its cached prefix for every turn. A rule that fires appends to the conversation instead, which is where every tool result already goes.

Writing globs

Patterns accept **, braces and ranges. A comma-separated list is several patterns, while commas inside {…} stay part of one.
Paths are matched relative to the worktree with separators normalised, so src/** means the same thing on Windows, macOS and Linux.
Rules are human-authored, like AGENTS.md. seri never writes one. The one artifact it proposes is a skill.