Contributing Code with Claude Code
This guide is for people who want to write code for Breeze. It assumes you’ll
work with Claude Code (or a compatible agent).
The repo ships a CLAUDE.md and a set of project skills that give the agent
most of the project’s conventions automatically. Your job is to point it at the
right work and to hand back finished, self-reviewed, green PRs.
If you only want to report a bug or pitch an idea, you don’t need any of this —
see the top of CONTRIBUTING.md.
Set up the agent
Section titled “Set up the agent”-
Clone the repo and run Claude Code from the repo root. That’s what loads
CLAUDE.mdand the project skills in.claude/skills/. Don’t re-explain the conventions to the agent; they’re already in context. -
Install the superpowers plugin. The process skills this guide names (
brainstorming,writing-plans,executing-plans,subagent-driven-development,test-driven-development) come from it, not from the repo. -
Install the
pr-review-toolkitplugin for the self-review step below.
The repo ships 15 project skills in .claude/skills/. Claude Code loads them all,
but they aren’t all meant for you. Some run maintainer workflows (triage,
merging, releases, production deploys).
Use these:
| Skill | Use it for |
|---|---|
breeze-testing |
Test conventions: Drizzle mocks, Go table tests, the coverage checklist |
worktree-stack |
A running, seeded local stack (API, web, portal) for your worktree, for browser checks |
agent-info, ai-agent, breeze-helper |
Architecture references for the Go agent, the AI agent, and the Helper desktop app |
agent-log-debugging |
Reading agent diagnostic logs on your local stack |
Use these with care:
| Skill | Caveat |
|---|---|
issue-to-pr |
A good runbook from issue to reviewed PR, but it assumes write access: it self-assigns the issue and pushes to origin. Without write access, comment on the issue instead and push to your fork. |
feature-testing |
End-to-end checks across UI, API and agent. Point it at your local stack, never at a hosted URL. |
security-review |
Fine for reviewing code. Report anything you find privately (see SECURITY.md), never in a public issue or PR. |
Ignore these — they’re maintainer tooling: gh-queue, feature-delivery,
release, pre-release-sweep, e2e-coverage, ui-qa-sweep.
The one idea to internalize
Section titled “The one idea to internalize”Non-trivial work on Breeze starts as a plan document. A plan spells out the goal, the architecture, and a checklist of tasks. It’s a ready-to-implement work order, written for an agent to execute.
That means a plan is two things at once:
- The work definition: what there is to build.
- The approval: once a plan is approved, the what and the how are agreed. You don’t need a separate sign-off to start.
1. Find something to build
Section titled “1. Find something to build”Work is tracked on GitHub issues. The public roadmap at breezermm.com/roadmap shows shipped, in-progress, planned, and exploratory items from the same tracker.
Don’t mine docs/superpowers/plans/ for work. It’s an archive of plans that
have already shipped, kept for history.
-
Pick an unassigned issue that fits your appetite. Some are small UI or CRUD jobs; some touch deeper systems.
-
Comment on the issue that you’re taking it, so two people don’t grab the same one.
-
If it’s more than a contained fix, start with a plan (below).
2. …or propose your own
Section titled “2. …or propose your own”Want to scratch your own itch? The plan comes first.
-
Open (or find) a GitHub issue describing the problem.
-
In Claude Code, use the
brainstormingskill to pin down intent and requirements, thenwriting-plansto produce the plan. -
Attach the plan to the issue and wait for a 👍 on the plan. Once approved, it’s an open work order like any other.
3. Build it
Section titled “3. Build it”-
Work on a branch in its own worktree, cut from current
main. Fetch and rebase before you start exploring — a stale tree sends the agent after code that has already changed. -
Follow the plan’s
REQUIRED SUB-SKILLnote (usuallysubagent-driven-developmentorexecuting-plans). Work the- [ ]tasks in order and check them off. -
Write the test first and watch it fail, then implement.
breeze-testingcovers the repo’s patterns. Tests live next to the source file (routes/devices.ts→routes/devices.test.ts). New features ship with tests. -
For UI changes, bring up a stack with
pnpm wt-stack up(or theworktree-stackskill) and check the change in a browser. Tear it down withpnpm wt-stack downwhen you’re done.
4. Before you hand it over
Section titled “4. Before you hand it over”Two things are your responsibility. A PR that skips them isn’t ready.
-
Make CI green yourself. Mirror the gate locally before you open anything, and fix your own reds. The single required check is CI Success, which aggregates every blocking job: lint, type check, Test API, Test Web, Test Agent, the security audit, and the sharded Integration Tests.
-
Self-review your own diff. Run
/code-reviewor/pr-review-toolkit:review-pragainst your changes, fix what’s real, and say in the PR what the review found.
5. Open the PR
Section titled “5. Open the PR”A PR means done, green, self-reviewed, ready to merge. It isn’t a discussion venue or work in progress.
-
Use Conventional Commits (
feat:,fix:,docs:, …). -
Keep it to one concern. Don’t mix a feature, a refactor, and a docs sweep. Small, single-purpose PRs review fast.
-
Fill in the PR template. Use
Closes #NNNwhen the PR fully resolves the issue,Refs #NNNwhen it only covers part of it. Repeat the keyword for each issue (Closes #1, closes #2). -
Open it against
main. A PR based on another branch gets no CI run.