coding-principles
Skill712 starsChanged 8 months agoMITView on GitHub
Language-agnostic coding principles for maintainability, readability, and quality. Use when implementing features, refactoring code, or reviewing code quality.
13 other projects use a version of this.
Adopted by
Most recently taken up by
- nesquena/steward-ostheir own version, first seen Nov 3, 2026
- a2ui-project/a2uitheir own version, first seen Nov 1, 2026
- hajdu-patrik/claude-workspacetheir own version, first seen Nov 1, 2026
- hajdu-patrik/triroutertheir own version, first seen Nov 1, 2026
- google/A2UItheir own version, first seen Oct 25, 2026
- paologum/claude-skillstheir own version, first seen Oct 25, 2026
Used with
Projects with it also use prompt-engineering.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
kongyo2Skillprompt-engineering
Comprehensive prompt engineering framework for designing, optimizing, and iterating LLM prompts. This skill should be used when users request prompt creation, optimization, or improvement for any LLM task, or when users need help translating vague requirements into effective prompts through collaborative dialogue and iterative refinement.
Also in 3 projects that use this
Other versions13 projects use a version of this.
Word for word · 0
None found.
Edited · 0
None found.
Wrote their own version · 13
- a2ui-project/a2ui★ 17ksame name
- google/A2UI★ 17ksame name
- nesquena/steward-os★ 76same name
- hajdu-patrik/claude-workspace★ 46same name
- hajdu-patrik/trirouter★ 46same name
- kaustubhhiware/agent-skills-fullstack-development★ 16same name
- Ron-dali/vibe-coding-rules★ 4same name
- sefaertunc/Worclaude★ 4same name
- thejordanleopold/claude-code-skills-distilled★ 4same name
- aivos-xie/hermes-skills★ 1same name
3 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository27 other files it gives its agents.
- ai-development-guideSkill
- documentation-criteriaSkill
- external-resource-contextSkill
- implementation-approachSkill
- integration-e2e-testingSkill
- llm-friendly-contextSkill
- recipe-add-integration-testsSkill
- recipe-buildSkill
- recipe-designSkill
- recipe-diagnoseSkill
- recipe-front-adjustSkill
- recipe-front-buildSkill
- recipe-front-designSkill
- recipe-front-planSkill
- recipe-front-reviewSkill
- recipe-fullstack-buildSkill
- recipe-fullstack-implementSkill
- recipe-implementSkill
- recipe-planSkill
- recipe-quality-profileSkill
- recipe-reverse-engineerSkill
- recipe-reviewSkill
- recipe-update-docSkill
- requirement-convergenceSkill
- subagents-orchestration-guideSkill
- testing-principlesSkill
- typescript-rulesSkill
The file
Show its rules and text
We split this skill into the rules it gives an agent
24 rules. 0 are common, 24 are distinctive, and 0 are very specific to this project.
0
Common
Most of the 12 edited versions we read keep these.
24
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 14
Delete over Comment: Remove unused code instead of commenting it out
- Distinctive: line 21
Keep the codebase lean and focused
- Distinctive: line 22
Delete code proven obsolete by the requested change after checking its callers.
- Distinctive: line 25
Use meaningful, descriptive names drawn from the problem domain
- Distinctive: line 26
Use full words in names; abbreviations are acceptable only when widely recognized in the domain
- Distinctive: line 27
Use descriptive names; single-letter names are acceptable only for loop counters or well-known conventions (i, j, x, y)
- Distinctive: line 29
Keep code self-documenting where possible
- Distinctive: line 46
Use early returns to reduce nesting
- Distinctive: line 47
Use early returns or extraction when nesting obscures state transitions or decision ownership.
- Distinctive: line 58
Use language-appropriate error handling mechanisms
- Distinctive: line 86
After identifying actual bottlenecks through profiling
- Distinctive: line 87
When performance issues are measurable
- Distinctive: line 93
Group related functionality: Keep related code together
- Distinctive: line 95
Consistent naming: Follow project conventions
- Distinctive: line 120
Delete commented-out code (retrieve from git history when needed)
- Distinctive: line 124
Update comments when changing code
- Distinctive: line 125
Use proper grammar and formatting
- Distinctive: line 126
Write for future maintainers
- Distinctive: line 132
Maintain working state: Keep tests passing
- Distinctive: line 133
Verify behavior: Run tests after each change
- Distinctive: line 146
Use parameterized queries (prepared statements) for all database access
- Distinctive: line 147
Use established cryptographic libraries provided by the language or framework
- Distinctive: line 153
When a change alters a boundary where external content or model output selects a tool's action, target, or destination, verify that those …
- Distinctive: line 159
Verify authorization for each resource access, not only at the entry point
“Common” is measured: kept by at least 6 in 10 of the 12 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
Language-Agnostic Coding Principles
Core Philosophy
- Maintainability over Speed: Prioritize long-term code health over initial development velocity
- Simplicity First: Choose the simplest solution that meets requirements (YAGNI principle)
- Design Convergence: Deliver the current required outcome with the least new design surface. Selecting persistent state, public or cross-boundary contracts, behavioral modes, reusable abstractions, or component splits carries enough surface to justify the full convergence process first.
- Explicit over Implicit: Make intentions clear through code structure and naming
- Delete over Comment: Remove unused code instead of commenting it out
Code Quality
Continuous Improvement
- Refactor related code inside the accepted outcome and governing boundaries when it reduces the change's risk or maintenance cost
- Improve code structure incrementally
- Keep the codebase lean and focused
- Delete code proven obsolete by the requested change after checking its callers; report uncertain or out-of-scope cleanup separately
Readability
- Use meaningful, descriptive names drawn from the problem domain
- Use full words in names; abbreviations are acceptable only when widely recognized in the domain
- Use descriptive names; single-letter names are acceptable only for loop counters or well-known conventions (i, j, x, y)
- Extract magic numbers and strings into named constants
- Keep code self-documenting where possible
Function Design
Parameter Management
- Group related positional parameters into an object, struct, or dictionary when call-site clarity or coordinated evolution requires it. Retain positional parameters when their order is conventional and the call remains clear, or an external/public signature requires them
- Preserve external/public signatures unless their migration is part of the accepted outcome or governing artifact
Single Responsibility
- Each function should do one thing well
- Extract a function when independently changing responsibilities or obscured control flow make the current unit harder to understand, verify, or reuse; retain a cohesive domain flow when extraction would create artificial coupling
- Extract complex logic into separate, well-named functions
- Functions should have a single level of abstraction
Function Organization
- Pure functions when possible (no side effects)
- Separate data transformation from side effects
- Use early returns to reduce nesting
- Use early returns or extraction when nesting obscures state transitions or decision ownership; retain nested structure when it maps the domain decision more clearly
Error Handling
Error Management Principles
- Always handle errors: Log with context or propagate explicitly
- Log appropriately: Include context for debugging
- Protect sensitive data: Mask or exclude passwords, tokens, PII from logs
- Fail fast: Detect and report errors as early as possible
Error Propagation
- Use language-appropriate error handling mechanisms
- Propagate errors to appropriate handling levels
- Provide meaningful error messages
- Include error context when re-throwing
Dependency Management
Loose Coupling via Parameterized Dependencies
- Inject external dependencies as parameters (constructor injection for classes, function parameters for procedural/functional code)
- Depend on abstractions, not concrete implementations
- Minimize inter-module dependencies
- Facilitate testing through mockable dependencies
Reference Representativeness
Inspect the changed responsibility and enough representative callers, consumers, configuration and siblings to establish a compatible pattern or dependency. Nearby code is a starting point; when alternatives coexist, choose from their responsibility, contract, lifecycle and repository usage rather than proximity or global popularity alone. Record the evidence only when it changes the choice.
Expand to all known consumers for a changed public, shared, serialized or persistent contract whose compatibility depends on them. Otherwise stop when additional inspection cannot change implementation or proof. Resolve versions from applicable manifests and usage; record a specific limitation only when required compatibility evidence remains unavailable.
Performance Considerations
Optimization Approach
- Measure first: Profile before optimizing
- Focus on algorithms: Algorithmic complexity > micro-optimizations
- Use appropriate data structures: Choose based on access patterns
- Resource management: Handle memory, connections, and files properly
When to Optimize
- After identifying actual bottlenecks through profiling
- When performance issues are measurable
- Optimize only after measurable bottlenecks are identified, not during initial development
Code Organization
Structural Principles
- Group related functionality: Keep related code together
- Separate concerns: Domain logic, data access, presentation
- Consistent naming: Follow project conventions
- Module cohesion: High cohesion within modules, low coupling between
File Organization
- One primary responsibility per file
- Logical grouping of related functions/classes
- Clear folder structure reflecting architecture
- Split a file when it contains independently changing responsibilities or creates material navigation, coupling, or verification cost; retain a cohesive file when splitting would add avoidable coupling or navigation cost
Commenting Principles
Default: code first
Names, types, and structure are the primary medium. A comment earns its place only by carrying information the code itself cannot express. When in doubt, improve the name instead of adding a comment.
The test for every comment
A comment is justified only if it answers one of these:
- Why: reasoning, trade-off, or constraint behind a non-obvious decision
- Limitation / edge case: a boundary a reader cannot infer from the code
- Public API contract: behavior, inputs, outputs of an exported interface
One comment per decision. If a comment restates what the names and control flow already show, delete it and rename instead.
Comment Scope
- Comment the why, limits, and public contracts (per the test above); let names and structure carry everything else, including the "how"
- Record historical context in version control commit messages, not in comments
- Delete commented-out code (retrieve from git history when needed)
Comment Quality
- Base comments on stable rationale, limits, and contracts rather than dates, versions, or temporary state
- Update comments when changing code
- Use proper grammar and formatting
- Write for future maintainers
Refactoring Approach
Safe Refactoring
- Small steps: Make one change at a time
- Maintain working state: Keep tests passing
- Verify behavior: Run tests after each change
- Incremental improvement: Make the smallest sufficient improvement in each increment
Refactoring Triggers
- Code duplication (DRY principle)
- Functions that contain independently changing responsibilities or obscured control flow
- Complex conditional logic
- Unclear naming or structure
Security Principles
Secure Defaults
- Store credentials and secrets through environment variables or dedicated secret managers
- Use parameterized queries (prepared statements) for all database access
- Use established cryptographic libraries provided by the language or framework
- Generate security-critical values (tokens, IDs, nonces) with cryptographically secure random generators
- Encrypt sensitive data at rest and in transit using standard protocols
Input and Output Boundaries
- Validate all external input at system entry points for expected format, type, and length. External input includes request data, external service responses, model or tool output, and stored data whose writer is untrusted or whose consumer needs a guarantee the store does not make
- When a change alters a boundary where external content or model output selects a tool's action, target, or destination, verify that those values cannot exceed the operation scope and access rights already granted to the caller
- Encode output appropriately for its rendering context (HTML, SQL, shell, URL)
- Return only information necessary for the caller in error responses; log detailed diagnostics server-side
Access Control
- Apply authentication to all entry points that handle user data or trigger state changes
- Verify authorization for each resource access, not only at the entry point
- Grant only the permissions required for the operation (files, database connections, API scopes)
- For changes involving identity or protected resources, prioritize authentication and per-resource authorization review
For concrete detection patterns used by security review, see references/security-checks.md.
Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

