Contributing
Getting Started
HQ is split across several repos (see the Ecosystem & Repo Map). Contribute to the repo that owns the surface you’re changing: indigoai-us/hq-cli for the CLI, indigoai-us/hq-cloud for the sync engine, indigoai-us/create-hq for the installer, indigoai-us/hq-desktop-app for the desktop app. Scaffold changes go to indigoai-us/hq-core-staging, not hq-core.
- Fork the target repo:
gh repo fork indigoai-us/hq-cli(or another repo) - Clone your fork and
cdinto it - Install dependencies:
pnpm install(hq-cli, hq-cloud, hq-desktop-app, hq-console, hq-pro) ornpm ci(create-hq, hq-deploy, indigo-docs) - Build:
pnpm run build(ornpm run build) - Create a branch:
git checkout -b feature/my-feature
Branch Strategy
| Branch | Purpose |
|---|---|
main | Production. Always deployable. |
feature/* | New features. Branch from main. |
fix/* | Bug fixes. Branch from main. |
docs/* | Documentation changes. |
Making Changes
Code changes
- Make changes inside the repo that owns the surface (e.g.
hq-cli,hq-cloud) - Build it:
pnpm run build - Run typecheck:
pnpm run typecheck - Test your changes locally (see the Testing guide)
- For a user-facing change in hq-cli or hq-cloud, add a release-note fragment at
changelog.d/<branch-slug>.mdinstead of editingCHANGELOG.md. Changes with no user impact get theno-changelogPR label. - Commit with a clear, descriptive message
Scaffold changes (hq-core)
- Open the PR against
maininindigoai-us/hq-core-staging - Test in a throwaway instance:
npx create-hq ~/test-hq --local-template <path-to-your-staging-checkout> - After merge, the change ships in the next hq-core release, cut by the
promote-to-hq-coreworkflow (see Publishing Packages)
Documentation changes (this site)
- Edit MDX files in
indigo-docsundersrc/content/docs/ - Preview locally:
npm run dev - Verify at http://localhost:4321
Commit Messages
Follow conventional commits:
feat: add new worker scaffold commandfix: correct journal hash on Windowsdocs: update cloud sync architecture pagechore: bump dependenciesFormat: type: short description
Types: feat, fix, docs, chore, refactor, test, style
Pull Requests
Creating a PR
git push origin feature/my-featuregh pr create --title "feat: my feature" --body "Description of changes"PR Checklist
- Code builds without errors (
pnpm run buildornpm run build) - TypeScript passes (
pnpm run typecheckornpm run typecheck) - Release-note fragment added in
changelog.d/, orno-changeloglabel applied (hq-cli, hq-cloud) - Tests pass (if applicable)
- No secrets or PII in committed files
- Documentation updated if needed
- Commit messages follow conventional format
Review Process
- Open PR against
main - CI runs automatically
- Core team reviews
- Address feedback
- Squash merge when approved
Code Style
- TypeScript for all packages
- ES Modules (type: “module” in package.json)
- Strict mode enabled in tsconfig
- No default exports — use named exports
- Prefer
async/awaitover raw promises - Use
interfaceovertypefor object shapes - Error handling: throw typed errors, catch at boundaries
Architecture Decisions
When proposing significant changes:
- Open an issue describing the problem and proposed solution
- Get feedback before implementing
- Document architectural decisions in PR description
- Update relevant docs pages
Areas for Contribution
| Area | Examples |
|---|---|
| Module sync strategies | A distinct copy strategy (it currently runs the merge implementation) |
| CLI commands | New module management features |
| Testing | Unit tests, integration tests, E2E |
| Documentation | Tutorials, examples, API reference improvements |
| Scaffold content (hq-core-staging) | New workers, knowledge bases, skills |
Questions?
- Open a GitHub issue for bugs and feature requests
- Check the docs site for architecture and usage guides
- Review existing PRs for code patterns and conventions