# Contributing to Pi Desktop This guide covers bug reports, feature requests, and the pull request workflow. ## Architecture reference: `AGENTS.md` [`AGENTS.md`](AGENTS.md) is the canonical reference for the project's architecture, module layout, data-storage locations, distribution model, and delivery standards. Read it before making non-trivial changes; it is kept more current and more detailed than the summary in this guide. ### For AI coding agents If you use an AI coding agent (Claude Code, Codex, Kilo, Cursor, etc.) to work on this repository, the agent must read and follow [`AGENTS.md`](AGENTS.md), in particular its Final Delivery Checklist, before proposing or committing changes. Most agents load a file named `AGENTS.md` automatically; if yours does not, point it at the file explicitly at the start of a session. At minimum, an agent's work must: - Reuse existing patterns and utilities instead of duplicating logic - Ship complete implementations (no placeholders, dead code, or deferred work) - Add or update the colocated `*.test.ts` tests for any changed module - Pass `npm run typecheck`, `npm run lint`, `npm run build`, and `npx tsx --test` - Preserve the Electron security posture (see Electron security below) ## Contributor License Agreement **Before your first contribution can be merged, you must agree to the [Contributor License Agreement (CLA)](CLA.md).** The CLA confirms you have the right to contribute the code, grants the project a license to use your contribution, protects against patent claims, and defines trademark boundaries. By submitting a pull request, you acknowledge that you have read and agree to the CLA. ## How to contribute ### Reporting bugs 1. Check [existing issues](https://github.com/FaqFirebase/pi-desktop/issues) first 2. Open a new issue with: - Clear title and description - Steps to reproduce - Expected vs actual behavior - Environment (OS, Electron version, Pi version) - Screenshots if applicable ### Suggesting features 1. Open a [feature request](https://github.com/FaqFirebase/pi-desktop/issues/new?template=feature_request.yml) 2. Describe the use case and expected behavior 3. Explain why this would be useful to other users ### Submitting code This repository uses two long-lived branches: - `master` holds public-facing docs only (`README.md`, `AGENTS.md`, `LICENSE`, `CLA.md`, `CONTRIBUTING.md`, `.gitignore`). Do not target PRs here. - `Dev` holds all application source and is where active development happens. **Target your pull requests against `Dev`.** Steps: 1. Fork the repository 2. Check out and branch from `Dev`: ```bash git checkout Dev git pull git checkout -b feature/my-feature ``` 3. Make your changes following the coding standards below 4. Test your changes thoroughly 5. Commit with a clear message: ```bash git commit -m "feat: add my feature" ``` 6. Push to your fork: ```bash git push origin feature/my-feature ``` 7. Open a pull request against `Dev` (not `master`) ### Commit message format We use [Conventional Commits](https://www.conventionalcommits.org/): ``` ():