Team Brilliant

clau — one Claude Code, many hats

Profiles for Claude Code.

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.

zsh — ~/dev/acme
$ clau
↑↓ move · space toggle · enter launch
acme
prod
stage
dev
docs
research
>Try “why did the nightly sync stall?”
⬢ prod⬢ docs· Opus 5 · acme
one directory per hatmerged at launch

You have been here

Everything you ever installed, in every session.

Marketing skills in a refactor

The copy and SEO skills you added for launch week sit in the context of every refactor since.

Prod connected while you experiment

The production database server is up while you try a skill someone posted yesterday.

The 40-line setup message

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

A hat is a folder.

i.

5 files, all optional

settings.json for plugins and permissions, mcp.json for servers, persona.md for instructions, .env for the environment, color for the badge.

ii.

A base/ is inherited

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.

Launched with one command

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

What changes.

A cleaner context

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 blast radius you can see

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.

A setup your team can commit

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.

Nothing to unlearn

4 zsh files. Every claude flag still passes through, and plain claude is exactly what it was.

Use cases

Hats people actually wear.

Production, read-only

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.

One client, one family

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.

Plan in one hat, build in another

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.

Marketing in its own hat

clau copy

Copy, SEO and newsletter skills in a hat of their own. They never see a refactor; a refactor never sees them.

2 hats at once

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

Nothing to replace.

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

Hand the repo to Claude Code.

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.

Let Claude build it

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

Or by hand

# 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

Then, in any repo

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

Straight answers.

Is it a wrapper around Claude Code?

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.

Does it change plain claude?

No. Type `claude` and nothing clau did applies. clau is only for hats.

Where do secrets live?

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.

Can I commit hats to a repo?

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.

Linux?

The launcher is zsh. Only the 2 keychain calls are macOS; swap them for secret-tool or pass and nothing else changes.

Many hats, one command.

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.