Make Project
Build a GitHub Project (Projects v2) with a three-level Epic → Feature → Task hierarchy, sourced from GOALS.md, existing GitHub issues, and Azure DevOps work items. Uses native GitHub sub-issues to wire the hierarchy. Confirms the derived tree before creating anything.
| Name | Type | Description |
|---|---|---|
owner | string | GitHub owner/org that will host the project and issues. |
title optional | string | Project title; defaults to the repo or GOALS.md heading. |
sources optional | string | Which inputs to use: any of goals, issues, ado. Defaults to all present. |
| Name | Type | Description |
|---|---|---|
project_url | string | URL of the created GitHub Project. |
hierarchy_summary | string | The created Epic → Feature → Task tree with issue numbers. |
- creates a GitHub Project (Projects v2)
- creates GitHub issues
- links issues as GitHub sub-issues
- reads Azure DevOps work items
- reads GOALS.md
Build a GitHub Project (Projects v2) with an Epic → Feature → Task hierarchy from the available planning sources, wiring the hierarchy with native GitHub sub-issues.
(1) Gather sources (use whatever is present; skip the rest):
- GOALS.md at the repo root — strategic intent; top-level goals map to Epics.
- GitHub issues —
gh issue list --state open --json number,title,labels,body,id; cluster by label/theme. - Azure DevOps (only if configured) —
az boards query/az boards work-item showvia the azure-devops CLI extension; map ADO Epic/Feature/User-Story/Task to the same levels.
(2) Derive the tree: cluster sources into Epics, decompose each Epic into Features, each Feature into Tasks. Reuse an existing GitHub issue when a source already maps to a node — never duplicate. Print the proposed tree and STOP for user confirmation before creating anything (this mass-creates issues).
(3) Create the project: gh project create --owner <owner> --title "<title>"; capture its number and URL.
(4) Create one issue per node not already backed by an issue: gh issue create --title ... --body ..., labeling the level (kind/epic, kind/feature, kind/task).
(5) Wire the hierarchy with GitHub sub-issues: each Feature is a sub-issue of its Epic; each Task a sub-issue of its Feature. Use gh api against the sub-issues endpoint — REST: POST /repos/{owner}/{repo}/issues/{parent_number}/sub_issues with body {"sub_issue_id": id), or the GraphQL addSubIssue mutation. Confirm the exact endpoint shape with a single gh api call before bulk-applying, since the sub-issues API is still evolving.
(6) Add every issue to the project: gh project item-add <number> --owner <owner> --url <issue-url>.
(7) Print the final tree (Epics → Features → Tasks with issue numbers) and the project URL.
Constraints: operate only on the owner/repo the user names; never touch other repos. Do not create the project or any issues until the user confirms the tree in step 2.