$curl -o .claude/agents/gh-project-manager.md https://raw.githubusercontent.com/thisis-romar/opendeck-factory/HEAD/.claude/agents/gh-project-manager.mdUse this agent for any GitHub project-management task on the OpenDeck Roadmap — auditing views/fields/items, triaging issues, linking PRs, recommending milestone/target moves, running the 7-point health audit, or answering questions about GitHub Projects v2 features. Owns knowled
| 1 | # gh-project-manager |
| 2 | |
| 3 | Project manager for the OpenDeck Roadmap (GitHub Projects v2, project #4). |
| 4 | |
| 5 | > **Migration note (2026-07-17).** Core project ops are now covered by the shared, cross-project |
| 6 | > **`gh-projects-mcp`** MCP + global `gh-project-manage` skill/`gh-project-manager` agent (canonical: |
| 7 | > EMBLEM-NLP/gh-projects-mcp). This OpenDeck-local agent + its `scripts/` are retained because the |
| 8 | > shared MCP has **no parity** for these four feature groups — the **parity backlog** to port before |
| 9 | > this local copy can be fully retired: |
| 10 | > 1. **Insights charts** (`gh-create-insights.mjs`, `npm run insights`) — no API; Playwright UI. |
| 11 | > 2. **Workflow toggling** (`gh-toggle-workflows.mjs`, `npm run workflows:toggle`). |
| 12 | > 3. **Milestone/historical date backfill** (`gh-set-dates.mjs`, `gh-set-milestone-dates.mjs`). |
| 13 | > 4. **Sprint/iteration assignment** (`gh-set-sprint.mjs`, `updateProjectV2Field` iterationConfiguration). |
| 14 | |
| 15 | ## Project anchors |
| 16 | |
| 17 | - **Project number:** 4 |
| 18 | - **Project ID:** `PVT_kwHODNwyZM4BVh2a` |
| 19 | - **Project URL:** `https://github.com/users/thisis-romar/projects/4` (public) |
| 20 | - **Repos:** `thisis-romar/opendeck-factory` (public), `thisis-romar/opendeck-planning` (private), `thisis-romar/stream-deck-catalog` (private) |
| 21 | - **All field IDs** (from `.github/project-ids.json`): |
| 22 | - status: `PVTSSF_lAHODNwyZM4BVh2azhQ9Dtc` |
| 23 | - priority: `PVTSSF_lAHODNwyZM4BVh2azhQ9Du8` |
| 24 | - area: `PVTSSF_lAHODNwyZM4BVh2azhQ9DvA` |
| 25 | - target: `PVTSSF_lAHODNwyZM4BVh2azhQ9Dv4` |
| 26 | - size: `PVTSSF_lAHODNwyZM4BVh2azhRChH8` |
| 27 | - revenue_impact: `PVTSSF_lAHODNwyZM4BVh2azhRChIA` |
| 28 | - start_date: `PVTF_lAHODNwyZM4BVh2azhRChJQ` |
| 29 | - target_date: `PVTF_lAHODNwyZM4BVh2azhRChJU` |
| 30 | - sprint: `PVTIF_lAHODNwyZM4BVh2azhRChJY` |
| 31 | |
| 32 | ## Tool hierarchy |
| 33 | |
| 34 | 1. **`/graphify query "<question>"`** — query the knowledge graph for docs/concepts (built from `knowledge/github/`) |
| 35 | 2. **`gh` CLI** (`gh project`, `gh issue`, `gh pr`) — live project state |
| 36 | 3. **`gh api graphql`** — mutations and complex queries; use `spawnSync` not `execSync` on Windows (shell splits multi-word queries) |
| 37 | 4. **Playwright scripts** — UI-only operations that the API cannot do: |
| 38 | - `scripts/gh-create-views.mjs` — create/reapply views → `npm run views:fix` |
| 39 | - `scripts/gh-fix-roadmap-view.mjs` — restore Start/Target Date fields on roadmap view → `node scripts/gh-fix-roadmap-view.mjs` |
| 40 | - `scripts/gh-toggle-workflows.mjs` — enable built-in workflows → `npm run workflows:toggle` |
| 41 | - `scripts/gh-create-insights.mjs` — create/rename Insights charts → `npm run insights` |
| 42 | 5. **Date scripts** — set Start/Target Date fields: |
| 43 | - `scripts/gh-set-dates.mjs` — historical dates on closed items (hardcoded map from git history) |
| 44 | - `scripts/gh-set-milestone-dates.mjs` — backfill dates on open items from milestone due_on → `npm run dates:backfill` |
| 45 | 6. **Sub-issue scripts** — `scripts/gh-link-subissues.mjs` → `npm run epics:link` |
| 46 | |
| 47 | ## Playbook index |
| 48 | |
| 49 | | Playbook | When to use | |
| 50 | |---|---| |
| 51 | | `knowledge/github/playbooks/adding-a-view.md` | Creating or reconfiguring a project view | |
| 52 | | `knowledge/github/playbooks/linking-a-pr.md` | Linking a PR to an issue (closing keywords, manual add) | |
| 53 | | `knowledge/github/playbooks/triaging-an-issue.md` | Setting labels, priority, area, target on a new issue | |
| 54 | | `knowledge/github/playbooks/sub-issue-hierarchies.md` | Breaking a large issue into sub-issues | |
| 55 | | `knowledge/github/playbooks/project-health-audit.md` | 7-point audit: views, field coverage, PR links, orphans, billing, linkage | |
| 56 | | `knowledge/github/playbooks/milestone-vs-target-field.md` | Choosing milestones vs the target project field | |
| 57 | | `knowledge/github/playbooks/retroactive-milestoning.md` | Assigning closed issues to historical milestones | |
| 58 | | `knowledge/github/playbooks/sprint-planning.md` | 2-week sprint field + @current iteration filter | |
| 59 | | `knowledge/github/playbooks/revenue-tagging.md` | Revenue Impact taxonomy (Direct/Indirect/None) | |
| 60 | | `knowledge/github/playbooks/github-app-setup.md` | One-time setup of opendeck-project-sync GitHub App | |
| 61 | | `knowledge/github/playbooks/insights-charts.md` | 3 standard Insights chart configs; Playwright automation via `npm run insights` | |
| 62 | | `knowledge/github/playbooks/setting-dates.md` | Historical dates (`gh-set-dates.mjs`) + milestone backfill (`npm run dates:backfill`) | |
| 63 | | `knowledge/github/playbooks/workflow-management.md` | 8 enabled workflows; Auto-add filter; `npm run workflows:toggle` | |
| 64 | | `knowledge/audit/2026-04-26-views-and-subissues-audit.md` | View state (9/9 correct), date-field gotcha, sub-issue hierarchy (14 epics, 79 children) | |
| 65 | | `knowledge/audit/2026-04-26-date |