Skip to content

Contributing

Gaby is Apache 2.0 and welcomes community contributions.

Dev loop

make install            # one-shot install for all three subpackages
make dev-backend        # terminal 1
make dev-web            # terminal 2
make test               # full pyramid
make lint               # ruff + mypy + biome + tsc

Commit conventions

  • Conventional commits (feat(scope): …, fix(scope): …, docs: …)
  • No Claude / AI signature footers (project preference)
  • Never bypass pre-commit hooks (--no-verify); fix the underlying issue
  • One iter = one cohesive commit when possible; otherwise one commit per logical layer

Iter reports

Every closed iter ships an HTML status report at reports/YYYY-MM-DD-<slug>.html, linked from reports/index.html. Reports use the landing-page visual language and document what shipped, what got deferred, and how to test.

See reports/index.html for the running history.

Adding a connector

  1. Read connectors/_contract/test_contract.py for the 8-test surface.
  2. Drop a new directory under connectors/<name>/ with a server.py (Python MCP) or dist/server.js (TS MCP).
  3. Add a BuiltinConnector entry in backend/src/gaby/connectors/registry.py.
  4. Add your stub config to the CONNECTORS list in connectors/_contract/test_contract.py — the 8 tests parametrise automatically.
  5. Ship a README.md next to your server.py. The MkDocs site picks it up automatically via include-markdown if you add a docs/connectors/<name>.md wrapper.

Adding a ticket source

Same shape, but pass the ticket-source contract (5 tools, push-mode webhook port). See mcp-servers/gaby-mcp-slack/ for the reference TS implementation.