Thanks for considering a contribution. This project is small and the contribution surface is deliberately narrow — most changes should fall into one of: a new tool, a bug fix to an existing tool, a description clarification, or a doc update.
Run the same gates CI will run. They're fast (under a minute combined):
npm run typecheck # tsc --noEmit
npm run lint # Biome lint
npm run format:check # Biome format check (run `npm run format` to fix)
npm run build # tsup — catches bundler-time regressions
npm test # vitest (all mocked, no token needed; bundle-shape canaries need dist/)npm run check runs Biome's combined lint+format check. npm run format
writes formatting fixes in-place.
CI (.github/workflows/ci.yml) runs all of the above plus
npm audit --audit-level=high on every PR.
There's no separate style guide — Biome enforces the rules
mechanically. The config (biome.json) is short and worth a skim.
What matters when reading existing code:
- 2-space indent, double quotes, trailing commas, semicolons,
100-col lines. Run
npm run formatand stop thinking about it. process.env["VAR"](bracket access), notprocess.env.VAR. Sidesteps TS's index-signature complaints;useLiteralKeysis off in the lint config so both forms pass, but the codebase is uniformly bracket-access. Match that.- Comments explain why, not what. Most files have a top-of-file comment block that names the file's role; per-section comments call out non-obvious decisions (Capsule quirks, security gates, refactor trade-offs). When something needed a long-form explanation it usually belongs in NOTES-ON-CAPSULE-API.md or DESIGN.md, not inline.
- No emojis in source unless explicitly user-facing.
- No new top-level deps without a clear reason. The dep tree is tiny on purpose (5 runtime deps); a new one needs a paragraph in the PR description.
- HOWTO.md — task-oriented procedures (run tests, add a tool, debug, cut a release).
- DESIGN.md — what's intentionally not implemented and why; read this before proposing a sweeping change.
- NOTES-ON-CAPSULE-API.md — Capsule v2 API quirks catalogued from production verification. If your PR works around a Capsule behaviour, append a section here.
- IDEAS.md — features that might land later; pick from here if you're looking for something to do.
Short is fine, but please cover:
- What changed and why
- What you tested (commands, scenarios)
- For new tools: an example call and the Capsule endpoint it hits
- For doc-only changes: nothing extra needed
The 🤖 Generated with Claude Code trailer is welcome on PRs that
were drafted with an LLM — it's just a label, not a quality signal.
By contributing you agree your contribution is licensed under the Apache License 2.0, same as the rest of the project.