https://chatgpt.com/share/e/68e67aa4-23c0-8006-8564-04380cdab7c3
```mermaid
flowchart TD
A[triage on notion] ==>|webhook| B((orchestrator))
B ==> C((PMagent.md))
C ==> D{repo check}
D -->|no, notion comment| F[missing repo/steps]
D ==>|yes, new git branch| E[github branch]
B -.->|codex mcp stdio| G((implementer.md))
E ==> G
G ==> H{diff check}
H -->|no, more info needed| I[no code change]
H ==>|yes, gihub api or mcp| J[commit, push, PR]
J ==> K{PR link check}
K -->|no| L[Notion, “Branch pushed but PR failed—check permissions”]
K -.->|yes| N[Notion, Set Status = PR Open @QA]
N -.-> M((tests.md))
K ==> B
M -.-> O[ping for QA ]
```
# optimal orchestrator
Turn a Notion **Bugs** database entry into a **proposed fix + pull request** automatically using:
- **Notion** (source of truth + notifications via @mentions)
- **OpenAI Agents SDK** with **Codex MCP (stdio)** for code changes
- **GitHub** (branch + PR)
- **Render** (always‑on web service that receives Notion webhooks)
> **What it does:**
> When you **create** a bug or set **Status → Triage** in Notion, the orchestrator:
>
> 1. fetches bug context → 2) clones `optimal-dashboard-v2` → 3) runs Codex MCP to implement a minimal fix → 4) commits, pushes, opens a PR → 5) updates the Notion page (PR link, branch, Status) → 6) **@mentions you in Notion** to test.
>
---
## Quick Start (TL;DR)
1. [ ] **Create a Notion internal integration**, copy its secret. Share your **Bugs** DB with it.
2. [ ] **Create a GitHub fine‑grained PAT** with repo read/write.
3. [ ] **Deploy the orchestrator on Render** (from the files below).
4. [ ] In your Notion integration, **add a webhook** pointing to `https://YOUR-RENDER-APP/webhooks/notion`.
5. [ ] In Notion, add a bug (set **Repo** and **Repro Steps**) and set **Status → Triage**.
6. [ ] A PR appears; Notion gets updated and you’re @mentioned to test.
---
## Requirements
- **Node 20+** runtime (Render uses its container)
- **GitHub repo:** `owner/optimal-dashboard-v2` (or set `DEFAULT_REPO`)
|Key|Purpose|Example|
|---|---|---|
|`OPENAI_API_KEY`|Agents + Codex MCP|`sk-...`|
|`NOTION_TOKEN`|Notion internal integration secret|`secret_...`|
|`NOTION_VERIFICATION_TOKEN`|Notion webhook signing/verification key|`whsec_...`|
|`GITHUB_TOKEN`|Fine‑grained PAT|`ghp_...`|
|`DEFAULT_REPO` (optional)|Fallback repo|`yourname/optimal-dashboard-v2`|
---
## Notion Setup
1. **Create internal integration**
- Notion → _Settings & members_ → _Developers_ → _+ New integration_
- Capabilities: enable **content**, **comments**, and **user info**
- Copy the **secret** → this is `NOTION_TOKEN`
2. **Share your Bugs database** with the integration
- Open your Bugs DB → **Share** → invite your integration
3. **Bugs database properties** (create or map to these exact names):
- **Name** (title)
- **Status** (select): _New_ → _Triage_ → _Planning_ → _Implementing_ → _PR Open_ → _In Review_ → _Awaiting QA_ → _Done_ → _Needs Info_ → _Blocked_
- **Repo** (rich text) → `owner/repo` (e.g., `yourname/optimal-dashboard-v2`)
- **Repro Steps** (rich text)
- **Key Paths** (rich text) – optional hints for where to look
- **Branch** (rich text)
- **PR** (url)
- **Assignee** (people)
4. **Webhook subscription*:
- In your Notion integration, add a **Webhook** pointing to `https://YOUR-RENDER-APP/webhooks/notion`
- Events: `page.created`, `page.properties_updated`
- After the first call, check your Render logs for a “verification”/“signing” token value. Put that into your Render env as `NOTION_VERIFICATION_TOKEN`.
> The orchestrator only acts when Status is **New** or **Triage** (to avoid loops).
---
## GitHub Setup
- Create a **fine‑grained personal access token** (PAT) with:
- **Repository permissions**: Contents (Read/Write), Pull Requests (Read/Write)
- Save it as `GITHUB_TOKEN` in Render env vars.
---
## Deploy on Render
*See chatGPT conversation for actual code snippets!*
#### Deploy steps
1. Push these files to GitHub (repo: `optimal-orchestrator`).
2. Render → **New** → **Web Service** → connect your repo → **Docker**.
3. Add env vars:
- `OPENAI_API_KEY`, `NOTION_TOKEN`, `GITHUB_TOKEN`, `DEFAULT_REPO=yourname/optimal-dashboard-v2`
- Leave `NOTION_VERIFICATION_TOKEN` blank for the first deploy.
4. Create Notion webhook → watch Render logs → copy the signing/verification value → set it as `NOTION_VERIFICATION_TOKEN` → redeploy.
---
## Test the Loop
1. In Notion **Bugs**:
- Set **Repo** to `yourname/optimal-dashboard-v2`
- Add **Repro Steps** (concrete steps)
- Optionally set **Assignee** (to @mention on PR ready)
- Set **Status → Triage**
2. Confirm:
- A new branch and PR appear on GitHub
- Notion properties update (Branch, PR, Status → _PR Open_)
- A Notion comment @mentions the **Assignee** (or posts a generic comment if none)
---
## ==Extending with More Agents (from scratch friendly)==
**Ideas for additional agents**
- **Planner**: derive acceptance criteria; generate `TEST.md`
- **Reviewer**: code review; set Notion status to _In Review_; approve/merge based on a Notion checkbox (_Auto‑merge OK_)
- **Security**: lightweight grep/static checks on diffs (fail gates on secrets/keys)
- **Docs**: produce/update `/docs/bugfix-<id>.md` and link it back to Notion
- **QA Bot**: turns `TEST.md` into a checklist comment under the PR **and** a Notion checklist
> To add, define a new `Agent`, slot it into `handoffs` in the order you want, and add any Notion/GitHub side effects after each handoff completes.
---
## Behavior & Guardrails
- **Triggers**: only `New` or `Triage` statuses start work (adjust as needed).
- **Missing info → Needs Info**: if **Repo** or concrete **Repro Steps** are missing, the bot comments and sets _Needs Info_.
- **Least privilege**: use a dedicated GitHub PAT/app with only the repos you need.
- **Idempotency**: Notion can send multiple updates; the service uses page status as the source of truth. (You can store a “last run id” in a hidden property later.)
- **Workspace hygiene**: each run uses `/tmp/...` and is cleaned afterward.
---
## Troubleshooting
- **403 posting comments**: Ensure your Notion integration has **comments** capability AND your DB/page is shared with it.
- **PR not created**: Confirm PAT scopes & repo access; check Render logs for the GitHub API response.
- **No code changes**: Improve **Repro Steps** and **Key Paths**; the Implementer will otherwise exit cleanly.
- **Webhook signature errors**: Paste the correct `NOTION_VERIFICATION_TOKEN` (the signing/verification secret surfaced when you created the webhook).