project-conventions
Scannednpx machina-cli add skill sequenzia/agent-alchemy/project-conventions --openclawProject Conventions
This skill guides you in discovering and applying project-specific conventions. Every codebase has its own patterns and practices - your job is to find them and follow them.
Convention Discovery Process
Step 1: Project Configuration
Check these files for explicit conventions:
Code Style:
.eslintrc*,eslint.config.*- JavaScript/TypeScript linting rules.prettierrc*,prettier.config.*- Formatting rulespyproject.toml,setup.cfg,.flake8- Python config.editorconfig- Editor settingsruff.toml,.ruff.toml- Ruff linter config
Project Structure:
tsconfig.json- TypeScript paths and settingspackage.json- Scripts, dependenciespyproject.toml- Python project config
Documentation:
CONTRIBUTING.md- Contribution guidelinesCLAUDE.md- AI coding guidelinesREADME.md- Project overviewdocs/- Extended documentation
Step 2: Existing Code Patterns
Study the codebase to find implicit conventions:
File Organization:
# Find how components are organized
ls -la src/components/
# Find test file patterns
find . -name "*.test.*" -o -name "*_test.*" -o -name "test_*"
# Find how utilities are organized
ls -la src/utils/ src/lib/ src/helpers/
Naming Patterns:
# Find function naming patterns
grep -r "^export function" src/ | head -20
grep -r "^def " src/ | head -20
# Find class naming patterns
grep -r "^export class" src/ | head -20
grep -r "^class " src/*.py | head -20
Import Patterns:
# Find import style (absolute vs relative)
grep -r "^import" src/ | head -30
grep -r "^from \." src/*.py | head -20
Step 3: Similar Features
Find features similar to what you're building:
-
Search for similar functionality:
# If building a "user profile" feature grep -r "profile" src/ find . -name "*profile*" -
Study the implementation:
- How is it structured?
- What patterns does it use?
- How does it handle errors?
- How is it tested?
-
Note the patterns:
- Component structure
- State management approach
- API call patterns
- Validation approach
Common Convention Areas
Naming Conventions
Discover by example:
# Function names
grep -E "^(export )?(async )?function " src/**/*.ts
# Variable names
grep -E "^(const|let|var) " src/**/*.ts
# Component names
grep -E "^(export )?function [A-Z]" src/**/*.tsx
Common patterns:
camelCasefor functions/variablesPascalCasefor components/classesUPPER_SNAKEfor constantskebab-casefor file names (some projects)snake_casefor file names (Python)
File Structure
Discover the pattern:
# Component structure
ls -la src/components/Button/
# Module structure
ls -la src/features/auth/
Common patterns:
Flat structure:
components/
Button.tsx
Button.test.tsx
Button.styles.ts
Folder per component:
components/
Button/
index.ts
Button.tsx
Button.test.tsx
Button.module.css
Feature-based:
features/
auth/
components/
hooks/
api.ts
types.ts
Error Handling
Discover the pattern:
# Find try-catch patterns
grep -A5 "try {" src/**/*.ts
# Find error types
grep -r "extends Error" src/
# Find error handling in API
grep -r "catch" src/api/
Apply what you find:
- Use the same error types
- Follow the same handling pattern
- Match logging approach
Testing Patterns
Discover the pattern:
# Find test structure
head -50 src/**/*.test.ts
# Find test utilities
cat src/test/setup.ts
cat src/test/utils.ts
Match the patterns:
- Test file location (co-located vs separate)
- Naming convention (
*.test.tsvs*.spec.ts) - Setup and teardown approach
- Mocking strategy
- Assertion style
API Patterns
Discover the pattern:
# Find API call patterns
grep -r "fetch\|axios\|api\." src/
# Find API response handling
grep -A10 "async function fetch" src/api/
Match the patterns:
- How are endpoints defined?
- How is authentication handled?
- What's the error format?
- How are responses typed?
Convention Application Checklist
When implementing a feature, verify you're following conventions for:
Code Style
- Variable naming matches existing code
- Function naming matches existing code
- File naming follows project pattern
- Import style matches (absolute vs relative)
Structure
- File location follows project structure
- Component organization matches
- Export style matches (default vs named)
Patterns
- Error handling follows project patterns
- Async patterns match existing code
- State management follows project approach
- API calls follow established patterns
Testing
- Test file location is correct
- Test naming follows convention
- Test structure matches existing tests
- Mocking approach is consistent
Documentation
- Comments follow existing style
- JSDoc/docstrings match project
- README updates if needed
When Conventions Conflict
Sometimes you'll find inconsistent patterns:
- Prefer newer code - Recent files often reflect current team preferences
- Prefer maintained code - Active parts of the codebase reflect current practices
- Prefer documented conventions - Explicit rules in configs override implicit patterns
- Ask if unclear - When in doubt, ask the user which pattern to follow
Red Flags
Watch for these signs that you might be breaking conventions:
- Your code looks very different from surrounding code
- You're using a library/pattern not used elsewhere
- Your file structure doesn't match siblings
- Your naming feels inconsistent with the codebase
- Linting errors (the project has explicit rules you're breaking)
When you notice these, stop and investigate the existing conventions more carefully.
Source
git clone https://github.com/sequenzia/agent-alchemy/blob/main/claude/core-tools/skills/project-conventions/SKILL.mdView on GitHub Overview
Project Conventions helps you identify the codebase's shared patterns, from naming and file structure to linting and team practices. It guides you to find explicit directives in config files and uncover implicit conventions inside the code, so your work matches established patterns.
How This Skill Works
It scans for explicit conventions in config files (e.g., ESLint/Prettier, tsconfig, pyproject) and analyzes code for common patterns in file organization, naming, and imports. It also compares against existing features to distill patterns for reuse and ensures the approach aligns with project-specific error handling and testing practices.
When to Use It
- When exploring a new codebase to understand its conventions
- When implementing a feature to match existing patterns
- When onboarding a teammate and aligning practices
- When refactoring for consistent structure and naming
- When validating code changes against project-style guides (linting, tests)
Quick Start
- Step 1: Identify project config files like .eslintrc*, tsconfig.json, pyproject.toml, and CONTRIBUTING.md
- Step 2: Scan the codebase for conventions in file organization, naming, and imports
- Step 3: Compare to similar features and adopt the established patterns, then confirm with tests and peers
Best Practices
- Start with explicit config files (linting, formatting, project config)
- Map the project's file and folder structure before coding
- Infer naming, import, and component patterns from existing code
- Study similar features to reuse proven approaches
- Document discovered conventions and validate them with peers
Example Use Cases
- Infer JavaScript/TypeScript conventions from .eslintrc*, tsconfig.json, and package.json
- Follow a flat vs feature-based file structure by inspecting src/components or features folders
- Align import styles (absolute vs relative) by grepping import patterns
- Mirror error handling patterns and API call error flows across modules
- Reproduce test layout and utilities by inspecting *.test.ts and test setup files