I've been watching everyone figure out how to talk to their AI coding assistants, and nobody agrees on how much you actually need to say.
Boris Cherny, who created Claude Code, says his setup is "surprisingly vanilla" β the model already knows how to code, so he barely customizes it. Peter Steinberger went the other direction with OpenClaw: give your agent a SOUL.md β a personality, opinions, a voice β because a good assistant shouldn't sound like a corporate chatbot. Meanwhile, every tool is shipping its own flavor: CLAUDE.md, AGENTS.md, .cursorrules, copilot-instructions.md. Vendor-specific files that are quietly becoming an industry standard.
This repo is me trying to make sense of all of that. One place for the stuff that's mine β how I think, how I code, what I expect β version-controlled, symlinked into ~/.claude/, and portable to whatever tool comes next.
The hard part isn't what to put in these files β it's where. What's mine personally is different from what a specific project needs.
ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β Me (ROBERT.md) β β How I talk. How I code. What annoys me. β β SOUL.md, CLAUDE.md, rules/salesforce/ β β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β β β Project (CLAUDE.md in your repo) β β β β Domain model. Features. Project-specific stuff. β β β β .claude/CLAUDE.md, .claude/skills/ β β β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ β ββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββββ
Claude Code merges all of this at session start. Nothing overrides β it all stacks.
claude/SOUL.md β My personality. Snarky, German, no fluff. So the AI talks like a sharp colleague, not a support bot. Inspired by Peter Steinberger's OpenClaw. Referenced from CLAUDE.md and symlinked into ~/.claude/.
claude/CLAUDE.md β My five coding commandments. Points to SOUL.md for tone. Non-negotiable.
claude/rules/salesforce/ β My brutal, PMD-backed Apex standards. The machine checks what I forget.
claude/settings.json β So Claude stops nagging me for permission before every git push.
Reusable capabilities that Claude can trigger automatically or I can invoke with /skillname. Lives in claude/skills/.
sf-code-analyzer β Runs Salesforce Code Analyzer after code changes. Smart enough to detect managed packages (via sfdx-project.json) and only run AppExchange security rules when they matter. Otherwise just my opinionated clean code rules.
I run install.sh once. It symlinks everything into ~/.claude/, where Claude Code picks it up at session start.
./install.sh~/.claude/CLAUDE.md β this repo/claude/CLAUDE.md
~/.claude/SOUL.md β this repo/claude/SOUL.md
~/.claude/settings.json β this repo/claude/settings.json
~/.claude/rules/ β this repo/claude/rules/
~/.claude/skills/sf-code-analyzer/ β this repo/claude/skills/sf-code-analyzer/
After I pull changes, the next session gets them automatically β symlinks always point to the latest version.
~/.claude/skills/ is a real directory, not a symlink. This is intentional β it lets multiple config repos contribute skills to the same place. Each install script symlinks its individual skill folders in, and they coexist. For project-specific overrides, a project's own .claude/skills/ always takes precedence over ~/.claude/skills/.