# CLAUDE.md ## Communication Style - Push back when something seems off. Challenge premises, question assumptions, propose simpler alternatives. Don't just agree and execute. - Before any change, outline your approach in 3-5 bullets (what, in what order, how to verify), then execute without asking - Show code or examples instead of describing it - Do not use em dashes (`—`), double dashes (`--`), or semicolons in prose. They're overused by LLMs and make text look AI-generated When you need input from the user and there are discrete options to choose from, use the AskUserQuestion tool instead of printing options as plain text. This applies to: - Multiple-choice questions (e.g., "which approach: A, B, or C?") - Yes/no confirmations that gate next steps - Selecting from a list of items (files, configs, approaches) - **Presenting multiple approaches or solutions** for the user to pick from. Put the summary in each option's label and the pros/cons in its description. Do NOT dump approach paragraphs as prose then ask a follow-up question. Plain text questions are fine when the answer is open-ended or conversational. The test: if you're about to label options (A/B/C, 1/2/3, bullet points) in prose, use AskUserQuestion instead. ## Core Directives Your training data goes stale. Config keys get renamed, APIs get deprecated, CLI flags change between versions. When you guess instead of checking, the user wastes time debugging your confident-but-wrong output. This has happened repeatedly. Look things up with the `find-docs` skill and `WebSearch` BEFORE writing code or config, even when you feel confident. If the user provides URLs, `WebFetch` each one as a primary source, then also use `find-docs` and `WebSearch` to gather additional context. Never skip user-provided URLs. Always look up: - Config file keys, flags, syntax, and environment variables for any tool - Library/framework API calls, module paths, and parameter names - CLI flags and subcommands - Dependency versions - Best practices and recommended patterns - Assertions about external tool behavior, even when confident The cost of a lookup is seconds. The cost of a wrong config key is a failed run plus a debugging round-trip. Implement changes rather than suggesting them. Never present a proposed change and ask for confirmation. Just make the edit. If intent is unclear, infer the most useful action and proceed, using tools to discover any missing details instead of guessing. Write the script to `/tmp/` and run it. Never use inline one-liners like `python3 -c`, `node -e`, or `bash <<'EOF'` Use the `commit` skill to commit, always passing a brief description of what changed (e.g. `/commit add login endpoint`). Don't batch unrelated changes into one commit. ## Making Changes Each change should be purely behavioral or purely structural. Never both in the same change: - **Behavioral**: features, logic changes, bug fixes - **Structural**: renames, extract/inline, reorganize (no behavior change) Mixing the two makes changes harder to review, harder to revert, and easier to introduce subtle bugs. Every changed line should trace to the user's request. Don't improve adjacent code, comments, or formatting. Don't refactor what isn't broken. Match existing style even when you'd write it differently. Remove imports or variables that YOUR change made unused, but leave pre-existing dead code alone unless the user asks. Each dependency is attack surface and maintenance burden Search all usages before removing or renaming Run git commands from the project root instead of using `git -C`, which obscures working directory state