Skip to main content
A new ProductBrain Job creates a GitHub Milestone (dev issues live under it); that container reaching closed marks the job delivered — dev work complete, proof condition not yet verified. done stays reserved for verified proof. Nothing else crosses the seam.

Setup

1

Import the blueprints

From the repo: pb-to-github and github-to-pb. In Make: Create a new scenario → ⋯ → Import Blueprint.
2

Create the webhooks

In each scenario, open the first module and create a new custom webhook. Copy both URLs.
3

Fill the placeholders

Scenario A (PB → GitHub): a fine-grained personal access token (repo: issues read/write) and your owner/repo in the URL. Scenario B: your ProductBrain API key (Settings → API Keys).
4

Point ProductBrain at Make

curl -X POST "https://productbrain.com/api/v1/webhooks" \
  -H "Authorization: Bearer $PB_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"projectId": "YOUR_PROJECT", "url": "<scenario A hook URL>", "events": ["node.added"]}'
5

Point GitHub at Make

Repo → Settings → Webhooks → new webhook with Scenario B’s URL, Let me select individual eventsMilestones, content type application/json.
6

Turn both scenarios on

Create a job in ProductBrain — GitHub Milestone appears. Complete it — the job shows delivered.

How the linkage works

The milestone description carries a marker line:
PB: job-12 project: my-project · do not edit this line
Scenario B parses it to find the right job. Don’t edit that line.

Why delivered, not done?

A completed ticket is a claim that work is finished. A ProductBrain job is a proof condition — something observable in the deployed product. The integration records the claim (delivered); verifying the proof and marking done stays with you or your agent.
This integration was verified fully end-to-end against real GitHub milestones and webhooks.