clau — one Claude Code, many hats
One command switches the skills, MCP servers, permissions and instructions Claude Code loads. Per kind of work, per client, per environment. Plain claude stays untouched.
You have been here
The copy and SEO skills you added for launch week sit in the context of every refactor since.
The production database server is up while you try a skill someone posted yesterday.
A teammate asks how your Claude Code is set up. You paste settings, 3 MCP configs and a list of caveats.
Each addition is reasonable on its own. The sum is a polluted context and a model that has to ignore most of what it was handed. Claude Code has no profiles feature; clau builds one from parts Claude Code already has.
What it is
i.
settings.json for plugins and permissions, mcp.json for servers, persona.md for instructions, .env for the environment, color for the badge.
ii.
Any base/ folder is a layer every hat beneath it wears. Root base/ for house rules, acme/base/ for the family's servers, the leaf for what only it needs.
iii.
clau prod merges the layers and runs claude with --settings, which outranks every settings file on disk. Name 2 hats and the session gets both.
~/.claude/personas/ — dotfiles · serves every repo base/ ← every hat: shared MCP, house rules acme/ ← a family of hats, not a hat base/ ← every acme/* hat: servers, deny rules prod/ stage/ dev/ ← the leaves you actually launch docs/ ← a top-level hat, no family <repo>/.claude/personas/ — committed · or clau/personas/ · found walking up from $PWD support/ ← project-owned · ${VAR} placeholders only
What you get
Each session sees only the skills and servers this work needs. Fewer tokens go to ignoring things, and the model follows the instructions that are there.
A read-only prod hat carries a read-only credential, deny rules on the mutating paths, and a red badge in the statusline. You know what this session can touch before you type.
Hats live in the repo under .claude/personas/ with ${VAR} placeholders. Everyone gets the same servers and rules; each machine keeps its own secrets in the keychain.
4 zsh files. Every claude flag still passes through, and plain claude is exactly what it was.
Use cases
clau acme/prod
A read-only database role, deny rules on psql, Edit and Write, and a persona.md that investigates rather than fixes. A loud red badge in the statusline says which blast radius is loaded.
acme/base/ · prod stage dev
The family's base/ carries the shared servers with ${VAR} placeholders; each leaf adds only what differs. Committed to the repo, so the whole team wears the same hats while secrets stay in the keychain.
clau builder --resume
Shape and plan wearing the product hat, then resume the same session in the builder hat. The plan carries over; the product-thinking skills don't.
clau copy
Copy, SEO and newsletter skills in a hat of their own. They never see a refactor; a refactor never sees them.
clau acme/stage docs
Name more than one and the session gets the union: every layer of every hat, merged in one pass, with a badge for each.
Fits what you have
plugins & marketplaces
Installed once, globally. A hat switches them on or off per session with enabledPlugins.
loose skills
Anything in ~/.claude/skills/ still loads everywhere; a hat hides what it doesn't want with skillOverrides.
repo .mcp.json
Repo servers keep loading. A hat adds its own, or pins an environment by declaring a server of the same name.
Raycast and agents
clau --json is the tree as data, so the Raycast extension launches the same hats. clau skill hands an agent the authoring rules.
Install
Paste the prompt into a Claude Code session in the repo you want hats for, describe them in the last line, and it builds to your spec: the launcher cloned once, personas in the repo, 3 zsh files in your shell, nothing else touched.
Install clau from https://github.com/teambrilliant/clau: clone it to ~/.claude/clau, source its 3 zsh files from my ~/.zshrc (clau.zsh first), install statusline.sh and the statusLine key in my user settings. Then run `clau` with no terminal, read what it prints, and set up personas for this repository under .claude/personas/. ${VAR} placeholders for every secret; tell me the clau-secret commands to run. Finish with `clau -h` and a dry run per persona.
My personas:
… a read-only prod hat, a builder hat, a docs hat# clone once, then the launcher + 2 helpers, clau.zsh first git clone https://github.com/teambrilliant/clau ~/.claude/clau source ~/.claude/clau/clau.zsh source ~/.claude/clau/clau-secret.zsh source ~/.claude/clau/clau-mcp.zsh # a coloured badge per active hat cp ~/.claude/clau/statusline.sh ~/.claude/ chmod +x ~/.claude/statusline.sh # your first hat mkdir -p .claude/personas/prod clau -h
zsh · jq · rg · macOS keychain for secrets
agent onboarding
Tell a session “onboard clau personas for this repo: run clau and follow it.” Without a terminal, clau prints the model, the persona tree and the authoring skill. The agent gets everything in one call, and nothing is installed for later sessions unless you ask.
Questions
No. clau is a zsh function that assembles flags (--settings, --mcp-config, --append-system-prompt-file) and runs the claude you already have. Nothing sits between you and the model.
No. Type `claude` and nothing clau did applies. clau is only for hats.
In the macOS keychain, as clau:NAME. mcp.json holds ${VAR} placeholders and is safe to commit; clau-secret set NAME stores the value once per machine.
Yes. Put them in .claude/personas/ — or clau/personas/, if you would rather keep them out of the Claude Code folder. Either one, found by walking up from $PWD, wins over ~/.claude/personas/ for a hat of the same name; base/ layers still come from your global tree.
The launcher is zsh. Only the 2 keychain calls are macOS; swap them for secret-tool or pass and nothing else changes.
Wear one hat per session, or several at once. 4 files, a folder convention, and the claude you already have.
Built by Team Brilliant. We ship agentic workflows for engineering teams; clau is one of the tools we use to do it.