Develop
Contributing
All development happens in the open at github.com/nullclaw. The repos share one toolchain, one CI system and one release convention, so contributing to a second component feels like the first.
Toolchain#
One version, everywhere:
| Requirement | Value |
|---|---|
| Zig | 0.16.0 exactly — every repo pins it |
| Node/npm | Only for NullHub's embedded Svelte UI |
| Anything else | No — SQLite and C deps are vendored |
The standard loop is the same in every repo:
git clone https://github.com/nullclaw/<repo>.git
cd <repo>
zig build
zig build testNullClaw uses zig build test --summary all; NullTickets adds bash tests/test_e2e.sh; NullPantry has suite targets (zig build test-api, test-agent-memory, test-vector) plus opt-in contract tests against external backends (zig build qdrant-contract and friends).
Test culture#
Tests are the family's main quality gate, and the numbers are taken seriously: NullClaw runs 5,300+ tests, NullBoiler 355 unit tests plus an e2e suite with mock workers, nllclw passes 385/385 (390 with the shell tool compiled in), and NullHub runs backend integration tests against a real hub process in a temporary home directory. A PR without tests for its change will be asked for them.
Shared CI: NullBuilder#
CI, nightlies and releases are reusable GitHub Actions workflows in nullclaw/nullbuilder, referenced at the v1 branch. A consuming repo's CI is a few lines:
jobs:
ci:
uses: nullclaw/nullbuilder/.github/workflows/zig-ci.yml@v1
permissions:
contents: read
with:
binary_name: nullclaw
artifact_prefix: nullclawThe CI workflow runs tests, cross-compiles ReleaseSmall binaries for a configurable target matrix, and reports test count, MaxRSS and binary size in the job summary — binary size is a tracked metric here, not an afterthought. zig-nightly.yml and zig-release.yml cover nightly builds (12-target default matrix, including Android via the NDK) and tag-driven releases with optional multi-arch Docker publish to ghcr.io. All third-party actions are pinned to commit SHAs.
Releases#
Versions are CalVer: pushing a v2026.x.y tag triggers the release workflow, which injects the version, builds the matrix, and publishes binaries with generated notes. Most repos carry a RELEASING.md with their specifics — NullClaw, NullHub, NullBoiler, NullTickets and NullWatch all do.
Where to contribute#
- Code and issues. NullClaw ships a
CONTRIBUTING.md; NullHub hasTESTING.mddescribing its testing strategy and roadmap, plus multiple external contributors already.AGENTS.md/CLAUDE.mdfiles in most repos carry conventions for coding agents — read them, whichever kind of contributor you are. - Docs. NullClaw maintains English and Chinese docs; nllclw is localized into 11 languages. Translation fixes are welcome, low-risk first PRs.
- Integrations. Bridges, SDKs and adapters (like the community
nullwatch-python-sdk) can live outside the org entirely — see Integrations.