Skip to content

Latest commit

Β 

History

History
75 lines (48 loc) Β· 6.18 KB

File metadata and controls

75 lines (48 loc) Β· 6.18 KB

πŸͺΌ ROBERT.md

(rules for any AI that dares to co-work with me)

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 layers

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.

What's in here

Instructions

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. Three of the Working Style bullets ("fail loud", "surface conflicts", "match the codebase's surface style, not its quality") were sharpened after digging through Andrej Karpathy's January 2026 thread on Claude's coding pitfalls β€” most of his observations were already covered here or by Claude Code itself, but those three earned their place. The last one is a brownfield-aware twist: match the repo's style, but don't inherit its bad habits.

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. Also carries a UserPromptSubmit hook that re-injects SOUL.md with every prompt β€” the voice rules decay over a long session, this keeps them fresh.

Opting a project out of SOUL

Some projects don't want the voice rules β€” a spec-interview skill like Speccy needs Claude to ask questions, which SOUL actively discourages. Two files in the project switch it off:

  • .claude/.no-soul β€” an empty marker file. The hook in settings.json checks for it and skips the SOUL injection in that project.
  • .claude/settings.local.json with {"claudeMdExcludes": ["**/SOUL.md"]} β€” stops the @SOUL.md import from CLAUDE.md loading there.

Everything else (the git-commit rules, coding standards) still applies. Delete the marker to switch SOUL back on.

Skills

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.

How I use it

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.

Multiple repos, one skills directory

~/.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/.