Thanks for your interest in contributing to RustyClaw! 🦀🦞
- Fork the repository
- Clone your fork:
git clone https://github.com/YOUR_USERNAME/RustyClaw.git - Create a branch:
git checkout -b my-feature - Make your changes
- Run tests:
cargo test - Commit:
git commit -m "feat: add cool feature" - Push:
git push origin my-feature - Open a Pull Request
- Rust 1.85+ (edition 2024)
- Cargo
cargo build# All tests
cargo test
# Specific test file
cargo test --test tool_execution
# With output
cargo test -- --nocapturecargo clippy
cargo fmt --checkBefore opening a PR, ensure your changes compile without warnings:
# Check library builds warning-free
cargo check --all-features 2>&1 | grep -E "warning:" && echo "Fix warnings before submitting" || echo "✓ No warnings"
# Check tests compile warning-free
cargo test --no-run 2>&1 | grep -E "warning:" && echo "Fix test warnings before submitting" || echo "✓ No test warnings"No PR should be considered finished while warnings are still present. Warnings slow down compilation, make CI noisier, and often indicate real issues.
- Follow Rust conventions (rustfmt enforced)
- Use
///doc comments for public items - Add tests for new functionality
- Keep functions focused and small
We use Conventional Commits:
feat:New featuresfix:Bug fixesdocs:Documentation onlytest:Adding/updating testsrefactor:Code changes that don't add features or fix bugschore:Maintenance tasks
- Add tool definition to
all_tools()insrc/tools.rs - Create
*_params()function for parameters - Create
exec_*()function for execution - Add to
resolve_params()match - Add integration tests in
tests/tool_execution.rs - Update documentation
- Unit tests go in the module (
#[cfg(test)] mod tests) - Integration tests go in
tests/ - Golden files in
tests/golden/(update withUPDATE_GOLDEN=1 cargo test)
- Never log secrets
- Use the sandbox for command execution
- Report security issues privately (see SECURITY.md)
- Open a Discussion
- Join the Discord
By contributing, you agree that your contributions will be licensed under the MIT License.