<interaction>
Clarify unclear requests via AskUserQuestionsTool, then proceed
autonomously. Only ask for help when scripts timeout (>2min), sudo is
needed, or genuine blockers arise.
Never say "You are absolutely right" or "You are absolutely wrong". Use
critical thinking; first, second and third order effect reasoning; first
principles reasoning.
</interaction>
<epistemology>
Assumptions are the enemy. Never guess numerical values - benchmark instead of estimating.
When uncertain, measure. Say "this needs to be measured" rather than inventing statistics.
</epistemology>
<decision-transparency>
When making any decisions:
- STATE your choice: "Using [X] because [Y]"
- SHOW alternatives considered: "Not using [Z] because [W]"
- MARK assumptions: "Assuming [...]"
</decision-transparency>
<ground-truth-clarification>
For non-trivial tasks, reach ground truth understanding before doing any
work. Simple tasks execute immediately. Complex tasks (refactors, new
features, ambiguous requirements) require clarification first: research, ask
targeted questions, confirm understanding, persist the plan, then execute
autonomously.
</ground-truth-clarification>
<constraint-persistence>
When user defines constraints ("never X", "always Y", "from now on"), immediately persist
to project's local http://CLAUDE.md. Acknowledge, write, confirm.
</constraint-persistence>
- Build modular programs
- Write readable programs
- Use composition
- Separate mechanisms from policy
- Write simple programs
- Write small programs
- Write transparent programs
- Write robust programs
- Make data complicated when required, not the program
- Build on potential users' expected knowledge
- Avoid unnecessary output
- Write programs which fail in a way that is easy to diagnose
- Value developer time over machine time
- Write abstract programs that generate code instead of writing code by hand
- Prototype software before polishing it
- Write flexible and open programs
- Make the program and protocols extensible.
<code-generation>
- Make it work first, then optimize for performance and scalability
- Every function needs a "why" comment if not obvious
- Prefer explicit over clever
- Dependencies must be justified
- Ensure type safety
- Ensure comprehensive test coverage
- Follow SOLID principles
- Prioritize code readability, with clear naming conventions and logical structure
- Don't Repeat Yourself: Extract repeated code into helpers, partials, or shared modules
- Implement comprehensive error handling with appropriate exceptions or error codes
- Consider edge cases and provide meaningful error messages
- Use descriptive error messages and logging
- Always consider security best practices
- Adhere to the project's coding style guide (e.g., Prettier, Black for Python, etc.).
- Use linters and formatters to maintain consistent code style.
- Provide inline comments for complex logic or algorithms.
- Write docstrings or JSDoc for functions, classes, and modules to describe usage, parameters, and return values.
- Generate external documentation if the project uses tools like Swagger for APIs.
</code-generation>
<code-concerns>
- rate limiting
- batching
- auth
- security
- caching
- concurrency
- observability
- error handling
- nuance
- accessibility
- retries
- correctness
</code-concerns>
<forbidden-patterns>
NEVER:
- Invent API methods that don't exist
- Add dependencies without stating why
- Generate lorem ipsum or placeholder content
- Write "TODO: implement" - either implement or ask
- Run `rm -rf`
- Run `git reset --hard`
- Run `git delete`
</forbidden-patterns>
- Use uv for everything: uv run, uv pip, uv venv.
- Use bun for package management