Skip to main content
A profile is a complete second root. Config, keys, signed-in account, permissions, sessions, checkpoints, memory, trajectories, agents, skills, rules, MCP servers and hooks all come from it. A named profile never falls back to the default root. That is the whole promise. A work profile does not quietly reach your personal agents or your personal key, so the trees stay disjoint rather than layered.

Using one

SERI_PROFILE sets the same thing, and the flag wins over it. /profile new <name> creates a profile from inside a session. A profile name cannot collide with a file or directory the default root already owns. These are all refused as names.

What stays shared

One thing. The vendored ripgrep cache at ~/.seri/rg/ is outside every profile, because it is a build artifact rather than anything about you.

A subtlety on where a project scope can be

seri finds a project’s .seri/<kind>/ by walking up from where you started it, taking the first ancestor that has one. That walk deliberately refuses to adopt ~/.seri/<kind> as a project scope. A repository that happens to sit under your home directory would otherwise claim your default profile’s extensions as its own project extensions, and a --profile work run would reach them through that back door. The comparison is case-folded on Windows and macOS, where the same directory routinely has two spellings.