Contributing
Your interest in contributing to this project is appreciated. Below is a series of instructions that will hopefully remain up to date because this tool should help manage that. However, if you notice that the steps seem out of date or misaligned with current practices in the repo, an update to this document could be a high-value first or second contribution to the project.
Note that the project’s own spec drift is self-managed, so please get acquainted with the tool and make sure your contributions stay in sync.
Development Setup
Install Rust (stable toolchain). Install pre-commit for pre-commit hooks.
Temporarily (until biome supports markdown), install prettier.
Setup clippy and rustfmt via:
rustup component add rustfmt clippy
Then setup the repo:
git clone https://github.com/davidroeca/NotarAI.git
cd NotarAI
cargo build
cargo install biome
cargo install --path crates/notarai
pre-commit install
The cargo install step installs the notarai binary to ~/.cargo/bin so the
Claude Code hook (notarai hook validate) resolves correctly. Re-run it whenever
you want the installed binary to reflect your latest local changes.
Making Changes
- Create a branch from
main - Make your changes
- Run
cargo buildto verify compilation - Run
cargo testto run the test suite - Run
cargo fmt --checkto verify formatting - Run
cargo clippy -- -D warningsto check for lint issues - Use the
/notarai-reconcileClaude Code command to check for spec drift - Add a changeset if your PR should trigger a release (see below)
- Open a pull request
Changesets
This project uses sampo for versioning and changelogs. If your PR introduces user-visible changes (new features, bug fixes, breaking changes), add a changeset:
sampo add
This creates a Markdown file in .sampo/changesets/ describing the change and
the bump level (patch, minor, or major). Commit this file with your PR.
When changesets are merged to main, a release PR is automatically created.
Merging the release PR publishes the new version.
Code Style
- Rust 2024 edition
cargo fmtfor Rust formattingcargo clippyfor Rust lintsbiome format --checkfor non-Rust file formatting (JSON, JS/TS, CSS, etc.)prettier --checkfor Markdown formatting (temporary until biome#3718 is resolved)- Functional style preferred over excessive use of structs with methods
- Core library lives in
crates/notarai/src/core/(notsrc/lib/due to Rust’s reserved module name)
Project Structure
See CLAUDE.md in the repository root for a detailed layout and architectural
constraints.
Good First Contributions
These changes will drive broader adoption but are not yet a priority:
- Support other coding agents (e.g. Codex, Aider, Cline, OpenHands, Goose, opencode)
- Find/create new issues and reference them here
License
By contributing, you agree that your contributions will be licensed under the Apache License 2.0.