Thanks for thinking about contributing. Robin is a personal AI assistant — the bar is "does this make my (or another user's) Robin experience meaningfully better without compromising the architectural invariants the project holds."
Read these in order:
docs/specs/2026-05-18-robin-v3-design.md— the architectural baseline (what's locked, why)docs/STATUS.md— current implementation snapshotdocs/BACKLOG.md— deferred work organized by priority; pick from here if you don't have your own idea
These are tests that fail if the locked decisions are silently violated. Don't work around them — work with them:
- No config files under
system/(tests/architecture/boundary.test.ts). All YAML/JSON/.env runtime config lives inuser-data/config/. - Migration versions are monotonic and kebab-case (
tests/architecture/migrations-monotonic.test.ts). - Every telemetry kind has a registered zod schema (
tests/architecture/telemetry-kinds.test.ts).
git clone <your fork>
cd robin-assistant-v3
nvm use # picks Node 24 via .nvmrc
pnpm install
pnpm test # 170+ tests, ~5s
pnpm typecheck
pnpm lintIf better-sqlite3 errors with NODE_MODULE_VERSION mismatch, you're on the wrong Node version — switch to Node 24 (nvm use 24) and re-run.
- TypeScript strict mode,
noUnusedLocals,noUnusedParameters,noImplicitOverride - Biome v2 for formatting and linting (
pnpm lint:fix,pnpm format) - Single quotes, semicolons, 100-character line width
- No
anyunless interfacing with an untyped boundary (and even then, narrow at the boundary) - Files focused; if a file gets large, propose a split
- Unit tests use
node --testwith--import tsx - Mock at the boundary — never hit live APIs in CI
- Real-API tests go in
tests/integration/and run locally, never in GitHub Actions (privacy: never put real personal account secrets in CI) - Each PR keeps
pnpm testgreen; broken tests block merge
- Copy
system/integrations/builtin/weather/as a template - Fill in
integration.yamlwith manifest, permissions, schedule, mcp.actions - Implement
index.tswithtick(),health(), and exportedactionsmap - Write
index.test.tswith mockedfetch - If shared OAuth or auth flow needed, drop the helper under
system/integrations/_auth/ - Add the integration's action-dispatch tool to
system/surfaces/mcp/extension/server.ts
- Description explains why, not just what
- Tests added or updated
-
pnpm typecheck && pnpm lint && pnpm testall green locally - No new config files under
system/ - No secrets in code, commits, or tests
- Updated
docs/STATUS.mdif user-visible behavior shipped - Updated
docs/BACKLOG.mdif you closed an item
See SECURITY.md. Don't open public issues for security problems.
By contributing, you agree your contributions are licensed under MIT.