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¶
- Read
connectors/_contract/test_contract.pyfor the 8-test surface. - Drop a new directory under
connectors/<name>/with aserver.py(Python MCP) ordist/server.js(TS MCP). - Add a
BuiltinConnectorentry inbackend/src/gaby/connectors/registry.py. - Add your stub config to the
CONNECTORSlist inconnectors/_contract/test_contract.py— the 8 tests parametrise automatically. - Ship a
README.mdnext to yourserver.py. The MkDocs site picks it up automatically viainclude-markdownif you add adocs/connectors/<name>.mdwrapper.
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.