Thanks for your interest in contributing!
Before opening an issue, search existing issues to avoid duplicates.
Use the issue templates:
- Bug Report - Something isn't working as expected
- Feature Request - Suggest a new feature or enhancement
- Documentation - Report missing or unclear docs
Blank issues are disabled - please use one of the templates above.
See the README for setup instructions.
think/
├── app/ # Electron desktop app (macOS/Windows)
├── extension/ # Chrome Extension (Manifest V3)
├── backend/ # Python FastAPI backend
├── scripts/ # Build and release scripts
└── docs/ # Documentation
We use Conventional Commits enforced by commitlint.
Format: <type>(<scope>): <description>
Types:
feat: New featurefix: Bug fixdocs: Documentation onlystyle: Code style changes (formatting, etc.)refactor: Code refactoringperf: Performance improvementstest: Adding or updating testschore: Maintenance tasks
Scopes:
app- Electron desktop appbackend- Python backendextension- Chrome extensionrelease- Release-related changesdeps- Dependency updates
Examples:
git commit -m "feat(app): add keyboard shortcuts for navigation"
git commit -m "fix(backend): handle empty memory search results"
git commit -m "chore(deps): update electron to v34"Every PR that changes functionality should include a changeset.
-
After making your changes, create a changeset:
pnpm changeset
-
Select the packages affected (usually both for unified versioning)
-
Choose the bump type:
patch- Bug fixes, small improvementsminor- New features, non-breaking changesmajor- Breaking changes
-
Write a summary of your changes (this appears in the changelog)
-
Commit the changeset file along with your code changes
Every PR must reference an Issue. CI will fail if no issue is linked.
- Create an issue first (bug, feature, or docs)
- Fork the repo and create your branch from
main - Make your changes
- Run
pnpm changesetto create a changeset - Test your changes locally
- Submit a PR with
Closes #<issue-number>in the description
- TypeScript/React: Follow existing patterns in the codebase
- Python: Follow PEP 8
- Keep changes focused and minimal
Releases use Changesets with unified versioning across all components.
- PRs with changesets merge to
main - Changesets bot opens a "Version Packages" PR
- Merge that PR when ready to release
- A git tag is created and release workflow runs
- CI builds macOS DMG and Chrome extension automatically
- Review the draft GitHub Release and publish when ready
# Enter pre-release mode
pnpm changeset pre enter beta
# Versions will be like v0.2.0-beta.0
# Exit when ready for stable
pnpm changeset pre exitpnpm version
git add -A
git commit -m "chore(release): v0.2.0"
git tag v0.2.0
git push && git push --tags