Thanks for your interest in contributing! This guide will help you get started.
- Node.js 22 LTS (
nvm usewill pick up the.nvmrc) - Git
git clone https://github.com/danielcinome/rulix.git
cd rulix
nvm use
npm install
npm run build
npm test| Command | Description |
|---|---|
npm run build |
Build with tsup (ESM + CJS) |
npm run dev |
Build in watch mode |
npm test |
Run tests with vitest |
npm run lint |
Check lint and formatting with biome |
npm run lint:fix |
Auto-fix lint and formatting |
npm run typecheck |
TypeScript type checking |
Before submitting any change, run the full check suite in this order:
npm run lint:fix
npm run typecheck
npm testOpen an issue using the Bug Report template. Include:
- Rulix version (
rulix --version) - Node.js version (
node --version) - Steps to reproduce
- Expected vs actual behavior
Open an issue using the Feature Request template. Describe the use case before the solution.
This is the most impactful contribution. Each adapter adds support for a new AI coding tool.
- Create
src/adapters/<tool-name>.tsimplementing theRulixAdapterinterface - Add test fixtures in
tests/fixtures/<tool-name>/ - Write tests in
tests/adapters/<tool-name>.test.ts - Register the adapter in
src/adapters/registry.ts - Update the Supported Tools table in
README.md - Submit PR with a changeset (
npx changeset)
See Writing an Adapter for a detailed guide.
- Fork the repo and create a branch:
feat/my-feature,fix/my-fix - Make your changes
- Run the full check suite:
npm run lint:fix npm run typecheck npm test - Add a changeset if your change is user-facing:
npx changeset - Open a PR against
main
We use Conventional Commits:
feat:— New featurefix:— Bug fixdocs:— Documentation onlyrefactor:— Code change that neither fixes a bug nor adds a featuretest:— Adding or updating testschore:— Tooling, CI, dependencies
- TypeScript strict mode — no
any, explicit return types on public functions - Biome for formatting and linting — run
npm run lint:fixbefore committing - No default exports — use named exports everywhere
- JSDoc on all public interfaces and functions
- Tests for all new functionality
src/
├── core/ # Parser, IR types, validator, tokenizer (tool-agnostic)
├── adapters/ # One file per tool (cursor.ts, claude-code.ts, etc.)
├── cli/ # CLI entry point and command implementations
└── index.ts # Public API
Key principle: All logic operates on the IR (Intermediate Representation), never on raw tool-specific formats. Adapters translate between tool formats and the IR.
- Small changes (bug fixes, docs): Single review, merge
- New features (adapters, commands): Open a discussion issue first
- Breaking changes: RFC issue with 1-week comment period
Be respectful, constructive, and collaborative. We're all here to make AI-assisted development better.