Contributing
Getting Started
HQ is split across several repos (see the Ecosystem & Repo Map). Contribute to the specific repo that owns the surface you’re changing — e.g. indigoai-us/hq-cli for the CLI, indigoai-us/hq-core for the scaffold, indigoai-us/hq-cloud for the sync engine.
- Fork the target repo:
gh repo fork indigoai-us/hq-cli(orhq-core,hq-cloud, …) - Clone your fork and
cdinto it - Install dependencies:
npm ci(orpnpm installforhq-console/hq-pro) - Build:
npm 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:
npm run build - Run typecheck:
npm run typecheck - Test your changes locally (see Testing guide)
- Commit with a clear, descriptive message
Scaffold changes (hq-core)
- Edit the scaffold seed in the
hq-corerepo - Test by scaffolding a throwaway instance:
npx create-hq ~/test-hq - Verify the change works in a fresh HQ instance
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 (
npm run build) - TypeScript passes (
npm run typecheck) - 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 (build + typecheck)
- 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 |
|---|---|
| New sync strategies | Copy strategy, two-way merge |
| PWA features | Offline mode, push notifications, Monaco editor |
| CLI commands | New module management features |
| Testing | Unit tests, integration tests, E2E |
| Documentation | Tutorials, examples, API reference improvements |
| Template content | New workers, knowledge bases, commands |
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