Maintainers and their access are listed in MAINTAINERS.md.
Thanks for contributing. This guide is intentionally short so pull requests land on the right branch with enough context to review.
Open pull requests against dev.
Do not target main unless a maintainer explicitly asks you to. main is reserved for maintainer-directed release flow, so PRs opened against main may be closed and asked to reopen against dev.
This repository uses Bun workspaces.
bun install
bun run dev:doctorTo run Gajae-Code from the checkout:
bun run devRun the smallest command that covers your change before opening a PR. Common options are:
bun test path/to/file.test.ts
bun run check:tools
bun run checkUse focused tests first for code changes, then broader checks when the change affects shared behavior or release-critical paths.
dev moves often, so expect to rebase. Two files behave in ways worth knowing about up front.
packages/*/CHANGELOG.md conflicts are normal. These files have no custom merge driver: if your branch and dev both added entries under ## [Unreleased], git reports a real conflict. Resolve it by keeping both entries under ## [Unreleased]. Never move an entry into a released ## [X.Y.Z] section, and never edit a released section — that version already shipped and its notes are historical record.
Resolving one of these by emptying the file is a real hazard, not a hypothetical: ten pull requests across six authors did exactly that within ten minutes of the merge driver being removed, each leaving a one-byte changelog with every released section gone. CI now fails a PR that removes any ## [X.Y.Z] heading (scripts/changelog-history-guard.ts), but check before you push:
git cat-file -s HEAD:packages/coding-agent/CHANGELOG.md # expect ~300 KB, not 1If it is already lost, recover with git checkout origin/dev -- packages/<pkg>/CHANGELOG.md and re-add only your own entry.
packages/coding-agent/src/internal-urls/docs-index.generated.ts is generated and untracked. bun install rebuilds it through the root prepare hook, and bun run generate-docs-index rebuilds it on demand. Do not commit it. If you see it in git status, something forced it back into the index — git rm --cached it. A tracked copy inlines every doc onto a single line, which git cannot three-way merge, so it conflicts on every rebase.
The CI workflow publishes a nightly prerelease from main at 04:23 UTC. Maintainers can run the same cycle with Run workflow → nightly-release. The run must pass the complete main check/test graph before publication, then publishes all public packages under the npm nightly dist-tag and creates a matching immutable GitHub prerelease with binaries and package-evidence assets. Do not create or move nightly tags manually, and do not edit package versions or [Unreleased] changelog sections for a nightly run; version staging is ephemeral inside CI.
- Target branch is
dev, notmain. - The PR description explains what changed and why.
- Relevant focused tests or checks are listed in the PR description.
- User-facing changes include a changelog entry when appropriate.