* docs: update README for v2.37 — changelog, extensions, stale refs - Update "What's New" section from v2.33 to v2.37 - Update extensions table: add Async Jobs and GitHub, remove LSP (Pi SDK core) - Fix extension count in architecture section (12 → 18) - Remove stale v2.17 version tags from Token Optimization section * docs: fix stale references across documentation - commands.md: update version example from v2.28 to v2.37 - troubleshooting.md: fix Node.js requirement from ≥20.6.0 to ≥22.0.0 - skills.md: fix project-local skills path from .pi/ to .gsd/ - CONTRIBUTING.md: fix scope area paths to include packages/ prefix, remove incorrect PR #1232 supply chain attack reference - vscode-extension: fix Node.js requirement, remove hardcoded RPC command count (changes over time) * docs: add troubleshooting for command not found after install Addresses #1542 — npm global bin directory not in PATH is a common issue on macOS, especially with Homebrew Node, version managers, or oh-my-zsh git aliases. - Add "command not found: gsd" section to troubleshooting.md - Add callout to getting-started.md install section
5.1 KiB
Contributing to GSD-2
We're glad you're here. GSD-2 is an open project and contributions are welcome across the entire codebase. We hold a high bar for what gets merged — not to be gatekeepers, but because every change ships to real users and stability matters.
Read VISION.md before contributing. It defines what GSD-2 is, what it isn't, and what we won't accept.
Before you start
- Check existing issues. Someone may already be working on it.
- Claim the issue. Comment on the issue to get it assigned to you before writing code. This prevents duplicate work and wasted effort.
- No issue? Create one first for new features. Bug fixes for obvious problems can skip this step.
- Architectural changes require an RFC. If your change touches core systems (auto-mode, agent-core, orchestration), open an issue describing your approach and get approval before writing code. We use Architecture Decision Records (ADRs) for significant decisions.
Opening a pull request
PR description format
Every PR needs a TL;DR and a detailed explanation. Use this structure:
## TL;DR
**What:** One sentence — what does this change?
**Why:** One sentence — why is it needed?
**How:** One sentence — what's the approach?
## What
Detailed description of the change. What files, modules, or systems are affected?
## Why
The motivation. What problem does this solve? What was broken, missing, or suboptimal?
Link issues where applicable: `Closes #123`
## How
The approach. How does the implementation work? What were the key decisions?
If this is a non-trivial change, explain the design and any alternatives you considered.
Requirements
- CI must pass. If your PR breaks tests, fix them before requesting review.
- One concern per PR. A bug fix is a bug fix. A feature is a feature. Don't bundle unrelated changes.
- No drive-by formatting. Don't reformat code you didn't change. Don't reorder imports in files you're not modifying.
- Link issues when relevant. Not mandatory for every PR, but if an issue exists, reference it.
Change type checklist
Include in your PR:
feat— New feature or capabilityfix— Bug fixrefactor— Code restructuring (no behavior change)test— Adding or updating testsdocs— Documentation onlychore— Build, CI, or tooling changes
Breaking changes
If your PR changes any public API, CLI behavior, config format, or file structure, say so explicitly. Breaking changes need extra scrutiny and may need migration guidance.
AI-assisted contributions
AI-generated PRs are first-class citizens here. We welcome them. We just ask for transparency:
- Disclose it. Note that the PR is AI-assisted in your description.
- Test it. AI-generated code must be tested to the same standard as human-written code. "The AI said it works" is not a test plan.
- Understand it. You should be able to explain what the code does and why. If a reviewer asks a question, "I'll ask the AI" is not an answer.
AI PRs go through the same review process as any other PR. No special treatment in either direction.
Architecture guidelines
Before writing code, understand these principles:
- Extension-first. Can this be an extension instead of a core change? If yes, build it as an extension.
- Simplicity wins. Don't add abstractions, helpers, or utilities for one-time operations. Don't design for hypothetical future requirements.
- Tests are the contract. Changed behavior? The test suite tells you what you broke.
See VISION.md for the full list of what we won't accept.
Scope areas
The codebase is organized into these areas. All are open to contributions:
| Area | Path | Notes |
|---|---|---|
| Terminal UI | packages/pi-tui |
Components, themes, rendering |
| AI/LLM layer | packages/pi-ai |
Provider integrations, model handling |
| Agent core | packages/pi-agent-core |
Agent orchestration — RFC required for changes |
| Coding agent | packages/pi-coding-agent |
The main coding agent |
| GSD extension | src/resources/extensions/gsd/ |
GSD workflow — RFC required for auto-mode |
| Native bindings | native/ |
Platform-specific native code |
| CI/Build | .github/, scripts/ |
Workflows, build scripts |
Review process
PRs go through automated review first, then human review. To help us review efficiently:
- Keep PRs focused and reasonably sized. Massive PRs take longer to review and are more likely to be sent back.
- Respond to review comments. If you disagree, explain why — discussion is welcome.
- If your PR has been open for a while without review, ping in Discord. We're a small team and things slip.
Local development
# Install dependencies
npm ci
# Build
npm run build
# Run tests
npm test
# Type check
npx tsc --noEmit
CI must pass before your PR will be reviewed. Run these locally to save time.
Security
If you find a security vulnerability, do not open a public issue. Email the maintainers directly or use GitHub's private vulnerability reporting.
Questions?
Open a discussion on GitHub or ask in the Discord #maintainers channel.