> ## Documentation Index
> Fetch the complete documentation index at: https://docs.augent.app/llms.txt
> Use this file to discover all available pages before exploring further.

# Contribution Guide

> How to contribute: code standards, PR process, and submitting your first pull request.

Augent is open source. Contributions are welcome: bug fixes, new features, documentation improvements.

***

## Submitting a Pull Request

1. Create a branch from `main`
2. Make your changes
3. Run tests: `pytest tests/ -v`
4. Run formatting: `black augent/`
5. Push and open a PR against `main` on [AugentDevs/Augent](https://github.com/AugentDevs/Augent)
6. Fill out the PR template. Describe what you changed and how you tested it

Keep PRs focused. One feature or fix per PR. Small PRs get reviewed faster.

***

## Reporting Issues

Use the structured issue templates on [GitHub Issues](https://github.com/AugentDevs/Augent/issues/new/choose):

* **[Bug Report](https://github.com/AugentDevs/Augent/issues/new?template=bug_report.yml):** something isn't working. Include steps to reproduce, expected vs actual behavior, how you're using Augent (MCP, CLI, Web UI, or Python API), and your OS.
* **[Feature Request](https://github.com/AugentDevs/Augent/issues/new?template=feature_request.yml):** suggest a new feature. Describe the problem it solves and your proposed solution.

***

## Adding a New Tool

1. Add the tool definition dict to `_ALL_TOOLS` in `mcp.py` (name, description, inputSchema)
2. Add an `elif tool_name == "your_tool":` branch in `handle_tools_call`
3. Write a `handle_your_tool(arguments: dict) -> dict` function
4. Use config defaults: `from .config import get_config; cfg = get_config()` then `arguments.get("param", cfg["key"])`
5. If your tool needs a heavy dependency, import it lazily inside the handler
6. Add tests in `tests/` and update the tool count in `test_mcp.py`
7. Update `CLAUDE.md` with usage documentation

## Config Integration

User defaults live in `augent/config.py`. To add a new config key:

1. Add it to `DEFAULTS` in `config.py`
2. Use `cfg["your_key"]` as the fallback in your handler's `arguments.get()`
3. Document it in the [Configuration guide](/guides/configuration)

***

## Code Style

* **Black** for formatting (line length 88)
* **Ruff** for linting (pycodestyle, pyflakes, isort, bugbear)
* Follow existing patterns in the codebase
* Keep functions focused and small
* No unnecessary dependencies
