# Contributing Guide

Thank you for your interest in contributing to Atomic Agents! This guide will help you get started with contributing to the project.

## Ways to Contribute

There are many ways to contribute to Atomic Agents:

1. **Report Bugs**: Submit bug reports on our [Issue Tracker](https://github.com/BrainBlend-AI/atomic-agents/issues)
2. **Suggest Features**: Share your ideas for new features or improvements
3. **Improve Documentation**: Help us make the documentation clearer and more comprehensive
4. **Submit Code**: Fix bugs, add features, or create new tools
5. **Share Examples**: Create example projects that showcase different use cases
6. **Write Tests**: Help improve our test coverage and reliability

## Development Setup

1. Fork and clone the repository:
   ```bash
   git clone https://github.com/YOUR_USERNAME/atomic-agents.git
   cd atomic-agents
   ```

2. Install dependencies with uv:
   ```bash
   uv sync
   ```

   To install all workspace packages (examples and tools):
   ```bash
   uv sync --all-packages
   ```

3. Set up pre-commit hooks:
   ```bash
   pre-commit install
   ```

4. Create a new branch:
   ```bash
   git checkout -b feature/your-feature-name
   ```

## Code Style

We follow these coding standards:

- Use [Black](https://black.readthedocs.io/) for code formatting
- Follow [PEP 8](https://www.python.org/dev/peps/pep-0008/) style guide
- Write docstrings in [Google style](https://google.github.io/styleguide/pyguide.html#38-comments-and-docstrings)
- Add type hints to function signatures
- Keep functions focused and modular
- Write clear commit messages

## Creating Tools

When creating new tools:

1. Use the tool template:
   ```bash
   atomic-assembler create-tool my-tool
   ```

2. Implement the required interfaces:
   ```python
   from pydantic import BaseModel
   from atomic_agents import BaseTool

   class MyToolInputs(BaseModel):
       # Define input schema
       pass

   class MyToolOutputs(BaseModel):
       # Define output schema
       pass

   class MyTool(BaseTool[MyToolInputs, MyToolOutputs]):
       name = "my_tool"
       description = "Tool description"
       inputs_schema = MyToolInputs
       outputs_schema = MyToolOutputs

       def run(self, inputs: MyToolInputs) -> MyToolOutputs:
           # Implement tool logic
           pass
   ```

3. Add comprehensive tests:
   ```python
   def test_my_tool():
       tool = MyTool()
       inputs = MyToolInputs(...)
       result = tool.run(inputs)
       assert isinstance(result, MyToolOutputs)
       # Add more assertions
   ```

4. Document your tool:
   - Add a README.md with usage examples
   - Include configuration instructions
   - Document any dependencies
   - Explain error handling

## Testing

Run tests with pytest:

```bash
uv run pytest
```

Include tests for:
- Normal operation
- Edge cases
- Error conditions
- Async functionality
- Integration with other components

## Documentation

When adding documentation:

1. Follow the existing structure
2. Include code examples
3. Add type hints and docstrings
4. Update relevant guides
5. Build and verify locally:
   ```bash
   cd docs
   uv run sphinx-build -b html . _build/html
   ```

## Submitting Changes

1. Commit your changes:
   ```bash
   git add .
   git commit -m "feat: add new feature"
   ```

2. Push to your fork:
   ```bash
   git push origin feature/your-feature-name
   ```

3. Create a Pull Request:
   - Describe your changes
   - Reference any related issues
   - Include test results
   - Add documentation updates

## Getting Help

If you need help:

- Join our [Reddit community](https://www.reddit.com/r/AtomicAgents/)
- Check the [documentation](https://atomic-agents.readthedocs.io/)
- Ask questions on [GitHub Discussions](https://github.com/BrainBlend-AI/atomic-agents/discussions)

## Code of Conduct

Please note that this project is released with a Code of Conduct. By participating in this project you agree to abide by its terms. You can find the full text in our [GitHub repository](https://github.com/BrainBlend-AI/atomic-agents/blob/main/CODE_OF_CONDUCT.md).
