You write code. If it passes tests, survives review, and gets merged, it earns auditable contribution credit under RBOB.
git clone https://github.com/runveil-io/core.git
cd core
npm install
npm testYou should see all tests passing. If you don't, you found your first contribution.
Requirements: Node.js 22+, npm
Veil uses the Rule-Based Open Build protocol. Four rules:
- R1 — Code must pass all tests in CI
- R2 — Merge requires K independent approvals (currently K=1, Kousan)
- R3 — Protected modules (
crypto/,wallet/) require higher threshold - R4 — Surviving code earns points in the contribution ledger.
What "surviving" means: your code stays in the codebase and passes tests. Dead code gets pruned, and points go with it.
Genesis Bonus: Early contributors earn 5x points. This reflects early-stage build risk and the fact that core system boundaries are still being established.
Points are tracked in the RBOB ledger with a git-auditable contribution trail. Future governance or reward systems should consume the same auditable record, but they are not part of the current runtime contract.
No separate task board. The repo is the task board.
npm test -- --reporter=verbose 2>&1 | grep FAILA failing test is a bounty. Fix it, PR it, earn points.
The codebase is compact enough to inspect directly. If you spot something missing or broken, that's a contribution candidate. Start with docs/README.md, then docs/technical-design/architecture/README.md and docs/technical-design/modules/README.md to compare the intended boundaries against the current implementation.
Look for labels:
good-first-issue— scoped, tested, documentedbounty— has explicit point valuehelp-wanted— bigger items that need ownership
Check desired/ directory (when populated) for feature specs with acceptance criteria and bounty values.
If you work with an agent, point it at desired/*.yaml, failing tests, and inline TODOs. The repo already exposes the task sources; the agent does not need a separate control plane.
Keep it simple:
- Fork & branch:
git checkout -b fix/relay-timeoutAI agents following AGENTS.md should useagent/{task-id}instead. - Write code + tests: if you touch
src/, touchtests/ - Run tests locally:
npm test— all green - Open PR with:
- What you changed (1-2 sentences)
- Which issue/TODO it addresses (if any)
- Test output showing pass
That's it. No issue template. No commit message convention. No CLA.
- CI runs automatically. Red CI = not reviewed.
- Currently Kousan reviews all PRs (CRL-1 stage).
- Expect review within 24-48 hours.
- Nits are suggestions, not blockers. Ship > perfect.
These modules are under R3 protection (higher review threshold):
src/crypto/— envelope encryption, key generationsrc/wallet/— encrypted storage, KDFsrc/relay/index.ts— core identity verification and routing logicpackage.json— dependency surfacetsconfig.json— compiler behavior
Open an issue first if you want to modify these. They affect security and economics.
- TypeScript strict mode
- No
anyunless you explain why in a comment - Tests use vitest
- We don't enforce a formatter yet — just be consistent with surrounding code
| Component | Library | Why |
|---|---|---|
| Runtime | Node.js 22+ | LTS, AI tooling ecosystem |
| Language | TypeScript 5.x | Strict mode, AI agents write it well |
| HTTP | Hono | 3KB, fast |
| WebSocket | ws | Standard |
| Crypto | tweetnacl | Pure JS, zero native deps, audited |
| DB | better-sqlite3 | WAL mode, zero config |
| Tests | vitest | Fast, good DX |
| Build | tsup | Single-file output |
Consumer (localhost:9960)
→ encrypts prompt with Provider's public key
→ sends to Relay over WebSocket
Relay (configured or discovered endpoint)
→ verifies auth, applies routing policy
→ forwards encrypted blob to Provider
Provider (your machine)
→ decrypts prompt
→ calls AI API (OpenAI, Anthropic, etc.)
→ encrypts response, sends back
Relay sees routing and witness metadata but not prompt plaintext. Provider sees plaintext execution payload, but it should not receive unnecessary Consumer-side local context.
- Telegram — fastest response
- GitHub Issues — for anything technical
- use your preferred coding agent if you want help scanning
desired/*.yaml, failing tests, and TODOs
Your code survives review and stays useful → it earns auditable contribution credit.