Thanks for helping improve open·kritt. Please follow our Code of Conduct when participating.
- Search existing issues before reporting a bug or requesting a feature.
- Use Discussions for questions, ideas, and larger proposals. Starting there can prevent duplicated work.
- Never report a vulnerability publicly. Follow SECURITY.md to submit it privately.
You need Git, Docker with Docker Compose, and Node.js 20 or newer. Fork the repository, then:
# External contributors: fork on GitHub, then clone your fork:
git clone https://github.com/<you>/open-kritt && cd open-kritt
# 2. Configure model access and bring the whole stack up
./kritt setup
./kritt start
# 3. Make changes on a branch and use Conventional Commits
git checkout -b feat/my-change
git commit -m "feat(frontend): add X"
# 4. Push and open a PR against main. CI must pass before it can merge.
These commands configure the environment and start the full stack. See the installation guide for more detail.
Keep each change focused. Add or update tests and documentation when behavior changes, then run the checks for every area you touched:
| Area | Checks |
|---|---|
| Frontend | cd frontend && npm install && npm run lint && npm run format:check && npm test && npm run build |
| Backend | cd backend && npm install && npx prisma generate && npx prisma validate && npm run lint && npm run format:check && npm test |
| Engine | cd engine && pip install -r requirements.txt && ruff check . && ruff format --check . && pytest |
| CLI | node --test scripts/kritt.test.mjs scripts/kritt-ui.test.mjs scripts/kritt-headless.test.mjs |
| Documentation | cd docs-site && npm run check-links |
Engine tests currently run locally but are not enabled in CI. A full-stack smoke test is recommended for changes that cross component boundaries:
docker compose up --build- Never commit credentials, tokens,
.env, or local scan data. - Database changes must use a new numbered SQL file in
database/init/. Migrations must be additive, forward-only, and safe to run repeatedly; updatebackend/prisma/schema.prismato match and runnpm run migratetwice. VERSIONis the product version's source of truth. Normal contributions should not bump it. If a version change is required, editVERSIONand runnode scripts/sync-version.mjs.- Keep Docker image tags pinned.
- Read the repository-specific agent and contributor gotchas before changing dependency lockfiles, Prisma setup, result keys, or Markdown rendering.
Every commit must use Conventional Commits:
git commit -m "fix(frontend): describe the change"Common types are feat, fix, docs, refactor, test, chore, and ci. A scope
is optional; use feat: or feat(frontend):, never feat():.
By intentionally submitting a pull request, commit, patch, or other contribution, you agree to the Contribution Terms, including assignment of your transferable rights in the contribution jointly to Harel Rom and Gabriel Balko. Do not submit work that an employer, client, university, or another party owns or restricts.
No separate signature, contributor agreement, form, checkbox, registry, or special commit syntax is required. The ordinary act of submitting the contribution is the only assent step.
Push your branch and open a pull request against main. In the pull request:
- Explain what changed and why, and link the related issue.
- List the checks you ran.
- Include screenshots for visible UI changes.
- Keep unrelated changes out of the diff.
- Complete the pull request template and make sure CI passes.
Contributions are distributed as part of the project under the repository's GNU AGPL v3.0 license.