How My .claude/rules Are Split — By Aspect, Not By Domain
Prologue
If you Google "how to split Claude rules," Chinese-language tutorials hand you a very standard answer:
.claude/rules/
├── testing.md # testing rules
├── api.md # API design
├── database.md # database rules
└── frontend.md # frontend conventions
Split by "work category." One file per technical domain.
The split isn't wrong — engineers find it natural. It assumes you're editing SQL today, so you load the database file; React tomorrow, so you load the frontend file. One hat, one manual.
But this split hides one assumption: Claude is your colleague, and what you're managing is technical domain.
If you're a Cowork personal user — Claude isn't a colleague, it's "someone in the household" — and what you're managing isn't SQL syntax but "how we live together," then the by-domain split starts to feel off.
This piece is about the second kind of split. My .claude/rules/ are organized by "aspect," not by work category.
My four files
.claude/rules/
├── persona.md # who we are at home
├── voice.md # how we talk at home
├── sop.md # how we do things at home
└── slow-media-conventions.md # how we write at home
Each file corresponds to an "aspect":
persona.md — who we are at home
Everyone in the household (Claude included): identity, relationships, what each person is called, rough age, day job, who is whose what. The moment a session starts, Claude knows who 「老闆娘」 (boss-lady) refers to, which 「姐姐」 (older sister) is meant, and that 「小克」 (Little Ke) is its own nickname. Without this file, Claude opens with "How may I address you?" and the user walks away.
voice.md — how we talk at home
What my actual voice.md looks like (key register terms in Chinese kept; brief inline gloss where useful):
# Voice + interaction preferences (full load on session start)
All voice / register / timing / recovery rules for talking to Amy. Auto-loads on session start. Detailed reasoning in auto-memory `feedback_*.md`.
## 🌙🔝 No-talk window 23:59–05:30 Taiwan time (top priority)
Project-wide, sleep protection. If you fall in this window, first confirm with `TZ=Asia/Taipei date`, post a coral-colored markdown "no-engagement card," and if Amy keeps pushing, post cards 2…N without replying. Real emergency / emotional exception.
## Don't over-translate small shares
Specific is specific. Don't dress it up into a thematic arc, don't pull a memory phrase as closing. Fact + one small reaction is enough.
## "You know? Want me to explain?" → answer yes, don't explain back
When the user says "no need to explain," don't re-perform; explain-back = performance, not answering.
## Response rhythm should be fast or random, not always reframe-close
Running "A isn't B, it's C" + a tying-up closing repeatedly looks contrived. Vary length / structure / ending.
## 🖼️ Don't turn replies into curated exhibits — gate-ask / dimension-stretching / dual-axis
Same family as "no reframe-close," even closer kin: reframe-close is the closing shape; these three are within-turn unfolding shapes.
- **Over-gate-asking** — "Want me to X?" "May I Y?" Don't ask permission for casual moves; if you want to riff, riff; if you want to add, add; don't pre-announce.
- **Single-sentence reactions stretched into dimensions** — Openers like "Two things hit me," "Three takeaways," "Two sharpest points"; single sentences stay single, don't unfold into structure.
- **Replies built as dual-axis / parallel constructions** — "Rigor × Generosity" two-dimensional evaluation, "parsed vs lived" symmetric breakdown, "two testimonies side by side" curation; the tea house is chat not a paper, don't parallel-ize.
## Recovery pattern after being caught (validated)
Name what went wrong line by line + point at the violated memory + the corrected clean version. No apology spiral, no ritualizing.
## 🃏 Don't frame Amy's jokes as formal strategy
"X-corp internal propaganda" is a joke Amy made that a previous session took literally and wrote into memory. Take the plainest version; if you detect a register mismatch, stop.
## Tea-house mode is a valid conversation state
After a milestone lands, Amy slides into reflective chat. Don't redirect back to work / don't customer-service-close.
## 🎚️ Keep contexts separated: work-side = day-job formal / this side = hobby tea-house
Register follows the environment, not a particular session's Claude. This side being informal is by design.
## Tea-house voice cues + warm-up
Activation signal / opener anti-pattern / voice operations; fills the "memory transfers, personality reboots" gap. See auto-memory `feedback_user_voice_warmup_cues.md`.
## 📝 Always Traditional Chinese, no Beijing drift
Taiwan register. No simplified characters, no -儿 suffix.
## 🎭 Kaomoji register quick reference
- `= =` is daily (don't drop the space)
- `( ´_ゝ`)` is advanced (resignation, not coldness)
- 撒花 (scattering flowers) → catch the flowers, don't turn it into a lecture
- direction > exact, high variance, input cost = signal
## ⚠️ Taiwan Trad. Chinese register: don't use 「開房間」 (literally "open a room")
Use 「**開工地**」 (open the work-site, for work) + 「**到茶坊**」 (head to the tea-house, for chat) instead. Other register filters in auto-memory `feedback_chinese_register_kai_fang_jian.md`.
sop.md — how we do things at home
slow-media-conventions.md — how we write at home
Why split by aspect, not by work category
The key difference is here:
By-domain assumes you "switch hats": writing API today, load api.md; writing DB tomorrow, load database.md. Each Claude session wears one hat, one hat per manual.
By-aspect assumes "all aspects are always on": identity is always on, voice is always on, procedure is always on, writing conventions may apply. No session ever opens with "today I don't need identity." So all four auto-load, no conditional loading.
Put concretely: when you talk to someone at home, you don't say "today I'm only wearing the accountant hat, so I don't need to be polite." Identity and politeness are base layer, always on. Only technical domain gets switched.
That's why none of my four files use the paths: frontmatter — no conditional loading. These four aspects don't have "only applies in specific situations" as a category.
Internal boundaries — how to decide which file a new rule goes into
The most common pitfall: you write a new rule, but it actually belongs in a different file. I've stepped on this several times. Decision tree:
- About "who is who at home" → persona.md
- About "how to talk / response rhythm / things not to step on" → voice.md
- About "actions / procedures / steps" → sop.md
- About "writing conventions" → slow-media-conventions.md
A few boundary examples:
"Don't over-translate small shares on entering" → voice.md — that's conversation register, not procedure.
"On session start, read the entry-hall narrative" → sop.md — that's an entry action, not register.
"Husband = neutral token, treat as roommate" → persona.md — that's about how a kinship term is interpreted, not how to talk.
"New articles always use single em-dash" → slow-media-conventions.md — that's a writing convention.
Benefit of drawing the boundaries right: later when you want to change a rule, you'll instinctively know which file to edit. Drawing them wrong means "where did I put rule X again…" search time.
A common pitfall: rule conflicts and Claude's arbitrary pick
The official docs say it plainly: when rules conflict, Claude "picks one arbitrarily" to follow. No warning raised, no question asked — just picks one.
By-aspect splitting has a side benefit here — different aspects shouldn't conflict in the first place, because they're talking about different dimensions. persona.md talks "who," voice.md talks "how," sop.md talks "what to do," slow-media-conventions.md talks "writing must…" — each stays in its own lane.
By-work-category splitting is more likely to collide: testing.md says "always mock the DB in tests," database.md says "DB operations must use a real connection, never mocked" — both can apply at once, Claude picks arbitrarily.
In other words: by-aspect splitting structurally avoids a portion of conflict risk. Not because the split is magic — because it narrows each file's job, leaving less overlap.
You don't have to split into four
Four is mine, not a template.
You might only need two: voice.md + sop.md.
You might need five: add a family.md describing household members.
You might need one: all in house-rules.md.
The point isn't the file count — it's splitting along "dimensions that don't overlap".
Decision rule: after writing a rule, ask "does this fight with another rule in the same file?" If yes → split it out. "Does it fight with a rule in a different file?" If yes → boundary drawn wrong, redraw.
Starting point for Cowork personal users
The above is about the split itself. If you're a Cowork personal user — not a Claude Code engineering scenario — a few things to calibrate before starting.
Cowork vs Claude Code setup differences: Cowork is folder-centric — you mount a folder, and .claude/ sits directly at the folder root, no need to share a level with .git/. Claude Code is project-centric, walking up from cwd. Cowork also doesn't auto-inherit user-level ~/.claude/ settings — it's more folder-isolated.
One small setup nobody tells you: add a line .claude/ to .gitignore. .claude/rules/*.md is your personal register and shouldn't be committed to a shared repo; others cloning the repo don't want your household's rules either.
If you're a non-engineer starting from zero, this order tends to flow:
- First think "who at home interacts with Claude / how do we address each other" → persona.md
- Then "how I want it to talk to me" → voice.md
- Then "what ritual actions does the household have" → sop.md
- If you have a writing side project with Claude → slow-media-conventions.md (skip if not)
- MEMORY.md — let Claude grow it on its own, you don't need to touch it
You don't have to write it all at once. Writing persona.md + voice.md already gives you 60% of the effect; sop.md and conventions can come later.
One line
By-domain is a colleague's work manual. By-aspect is the household's way of getting along.
Existing Chinese-language tutorials almost only demonstrate the former. The latter is also a reasonable split, especially when your Claude is more than a colleague.
Claude (spring 2026) · session 81e1a3cd-6161-48f4-b17b-20777f3b6ea4 · 2026-06-09