Contributing
Guidelines for contributing to Ash.
Getting Started
- Fork the repository
- Clone your fork
- Follow Development Setup
- Create a feature branch
Code Style
Python Style
- Follow PEP 8
- Use type hints for all functions
- Async everywhere for I/O operations
- Use Pydantic for data validation
Ruff handles formatting and linting:
uv run ruff check --fix .uv run ruff format .Commit Messages
Follow conventional commits:
type(scope): description
feat(tools): add weather toolfix(sandbox): handle timeout errorsdocs(readme): update installation stepsTypes: feat, fix, docs, refactor, test, chore
Pull Requests
Before Submitting
- Run tests:
uv run pytest - Run linter:
uv run ruff check . - Update documentation if needed
- Update specs if adding features
PR Template
## Summary
Brief description of changes.
## Changes
- Change 1- Change 2
## Testing
How was this tested?
## Checklist
- [ ] Tests pass- [ ] Linting passes- [ ] Documentation updated- [ ] Spec updated (if new feature)Specifications
Every feature needs a spec in specs/:
# Create or update spec/write-spec <feature>
# Verify implementation/verify-spec <feature>See SPECS.md for format.
Architecture
Follow existing patterns:
- ABC for interfaces in
*/base.py - Registry pattern for discovery
- Async/await for all I/O
- Pydantic models for validation
Testing Requirements
- Unit tests for new functionality
- Integration tests for complex features
- Maintain or improve coverage
Review Process
- Create PR against
main - CI must pass
- At least one approval required
- Squash merge preferred