12 KiB
name, description, allowed-tools
| name | description | allowed-tools | ||
|---|---|---|---|---|
| re:init | Initialize a GitHub Project for requirements management with custom fields and views |
|
Initialize Requirements Project
Initialize a GitHub Project for requirements management. This command is idempotent - safe to run multiple times without creating duplicates.
Prerequisites Validation
-
Check GitHub CLI:
- Verify
ghcommand exists:command -v gh - If not found: "GitHub CLI (gh) is not installed. Install it:"
- macOS:
brew install gh - Other: https://cli.github.com/
- macOS:
- Verify
-
Check Authentication:
- Run:
gh auth status - If command fails: "Not authenticated with GitHub. Run:
gh auth login" - Check output for required scopes:
repoandproject - If missing
projectscope: "Refresh authentication with:gh auth refresh -s project" - Note: Output could show "Token scopes: 'gist', 'project', 'read:org', 'repo', 'workflow'" format
- Run:
-
Detect Repository:
- Get repository info:
gh repo view --json nameWithOwner - If fails: "Not in a git repository with GitHub remote. Navigate to your project repository."
- Parse JSON to extract nameWithOwner (format:
{"nameWithOwner":"owner/repo"}) - Split nameWithOwner on "/" to get the owner (before the "/")
- Example: "sjnims/requirements-expert" → owner="sjnims"
- Get repository info:
Project Setup
-
Get Project Name:
- Use AskUserQuestion:
- question: "What should we name the GitHub Project for requirements tracking?"
- header: "Project Name"
- multiSelect: false
- options:
- label: "[Repository Name] Requirements" description: "Standard naming convention following best practices (recommended)"
- label: "[Repository Name] Backlog" description: "Alternative naming for backlog-style requirements tracking"
- label: "[Repository Name] Roadmap" description: "Emphasizes long-term planning and feature roadmap view"
- Note: User can select "Other" to provide a custom project name
- Replace [Repository Name] placeholder with the repository name (the part after the "/" in
nameWithOwnerfrom step 3). For example, ifnameWithOwneris "sjnims/requirements-expert", use "requirements-expert" - Store the user's choice for project creation
- Use AskUserQuestion:
-
Check for Existing Project (Idempotency):
- List existing projects:
gh project list --owner [owner] --format json - Parse JSON response:
{"projects":[{"id":"...","number":4,"title":"...","url":"..."}]} - Search the
projectsarray for a project wheretitlematches the chosen name - If found:
- Inform user: "Found existing project '[title]' at [url]"
- Capture project
number(notid) for subsequent commands - Note: Project number is the sequential number (1, 2, 3...) visible in the URL
- Skip to step 7 (field creation)
- If not found:
- Proceed to create project
- List existing projects:
-
Create GitHub Project:
- Create project:
gh project create --owner [owner] --title "[name]" --format json - Parse JSON response to extract
numberandurl - If creation fails:
- Display the actual error message from gh CLI
- Use AskUserQuestion for interactive recovery:
- question: "Project creation failed. How would you like to proceed?"
- header: "Recovery"
- multiSelect: false
- options:
- label: "Retry" description: "Try creating the project again"
- label: "Check permissions" description: "Show commands to verify and fix GitHub CLI permissions"
- label: "Exit" description: "Stop and let me fix the issue manually"
- Handle user choice:
- If "Retry": Re-execute the project creation command (line 64). If creation fails again, present the recovery options again (allowing user to continue trying, check permissions, or exit)
- If "Check permissions":
- Run:
gh auth status - Display the output
- Show refresh command:
gh auth refresh -s project - Explain: "Projects require 'repo' and 'project' scopes"
- Note: Projects are owner-scoped (user/org), not repository-scoped
- After showing diagnostics, present the same recovery options again (Retry, Check permissions, or Exit)
- Run:
- If "Exit": Exit gracefully with message:
Project creation failed. Manual steps to resolve: 1. Check authentication: `gh auth status` 2. Verify scopes include 'repo' and 'project' 3. Refresh token if needed: `gh auth refresh -s project` 4. Ensure you have permission to create projects for owner: [owner] 5. Retry the command: `/re:init` Error details: [show original error message]
- If creation succeeds:
- Inform user: "Created project: [name] at [url]"
- Capture project
numberfor subsequent commands
- Create project:
Custom Fields Setup
-
Check Existing Fields:
- List all existing fields once:
gh project field-list [project-number] --owner [owner] --format json - If command fails:
- Log warning: "Could not retrieve existing fields, will attempt to create all fields"
- Set field names list to empty (this ensures subsequent steps will attempt creation)
- Continue to step 8
- If command succeeds:
- Parse JSON response to extract field names
- Store the list of existing field names for use in subsequent steps
- Example: If response contains fields with names "Title", "Status", "Assignees", store these names
- This single query replaces multiple redundant field-list calls
- List all existing fields once:
-
Create Type Field (If Missing):
- Check if "Type" exists in the stored field names list from step 7
- If exists:
- Inform user: "Type field already exists, skipping creation"
- If not exists:
- Create field with all options in one command:
gh project field-create [project-number] --owner [owner] \ --name "Type" \ --data-type SINGLE_SELECT \ --single-select-options "Vision,Epic,Story,Task" \ --format json - If command fails: Note the failure but continue (user can add field manually)
- Inform user: "Created Type field with options: Vision, Epic, Story, Task"
- Create field with all options in one command:
-
Create Priority Field (If Missing):
- Check if "Priority" exists in the stored field names list from step 7
- If exists:
- Inform user: "Priority field already exists, skipping creation"
- If not exists:
- Create field with all options:
gh project field-create [project-number] --owner [owner] \ --name "Priority" \ --data-type SINGLE_SELECT \ --single-select-options "Must Have,Should Have,Could Have,Won't Have" \ --format json - If command fails: Note the failure but continue
- Inform user: "Created Priority field with MoSCoW options"
- Create field with all options:
-
Create Status Field (If Missing):
- Check if "Status" exists in the stored field names list from step 7
- If exists:
- Inform user: "Status field already exists, skipping creation"
- If not exists:
- Create field with all options:
gh project field-create [project-number] --owner [owner] \ --name "Status" \ --data-type SINGLE_SELECT \ --single-select-options "Not Started,In Progress,Completed" \ --format json - If command fails: Note the failure but continue
- Inform user: "Created Status field with workflow states"
- Create field with all options:
Views Setup (Manual Configuration Required)
-
Views Setup - Manual Instructions:
- Note: GitHub CLI does not support view creation or configuration
- All views must be created manually via the GitHub web interface
- Inform user: "Project views require manual setup in the GitHub web interface"
- Display project URL: [project-url]
Manual Setup Instructions:
-
Access the project:
- Open the project in your browser: [project-url]
- Or navigate to: Repository → Projects → [Project Name]
-
Create recommended views:
View 1: "By Type" (Board View)
- Click "+ New view" → Board
- Name: "By Type"
- Layout: Board
- Group by: Type
- Shows: All items grouped by Vision/Epic/Story/Task
View 2: "By Priority" (Board View)
- Click "+ New view" → Board
- Name: "By Priority"
- Layout: Board
- Group by: Priority
- Shows: All items grouped by Must Have/Should Have/Could Have/Won't Have
View 3: "Active Work" (Table View)
- Click "+ New view" → Table
- Name: "Active Work"
- Layout: Table
- Filter: Status = "In Progress"
- Shows: Only items currently being worked on
View 4: "Backlog" (Table View)
- Click "+ New view" → Table
- Name: "Backlog"
- Layout: Table
- Filter: Status = "Not Started"
- Shows: Work ready to be started
-
Set default view (optional):
- Click "..." menu on preferred view
- Select "Set as default"
Success Reporting
- Display Success Message:
✅ GitHub Project initialized successfully! Project: [Project Name] URL: [Project URL] Custom Fields Created: - Type (Vision, Epic, Story, Task) - Priority (Must Have, Should Have, Could Have, Won't Have) - Status (Not Started, In Progress, Completed) Next Steps: 1. Run `/re:discover-vision` to create your product vision 2. Then `/re:identify-epics` to identify major capabilities 3. Use `/re:status` anytime to see project overview
Error Handling
- Exit gracefully on any validation failure (steps 1-3)
- Display clear, actionable error messages
- If project creation fails: Show gh error output and suggest remedies
- If field creation fails: Note which fields failed but continue
- Views require manual setup: Provide comprehensive manual instructions
Implementation Notes
Key Architectural Points:
- Projects are owner-scoped, not repository-scoped: Use
--owner [owner]not--repo - Use project number, not project ID: Commands expect the sequential number (1, 2, 3...) visible in URLs, not the GraphQL ID (PVT_xxx)
- Field creation supports comma-separated options: Use
--single-select-options "option1,option2,option3"to create field and options in one command - Idempotency is critical: Always check for existing resources before creating
State Management:
This command intentionally does NOT persist local state (e.g., project number in a .local.md file). Design rationale:
- GitHub is the source of truth: All requirements data lives in GitHub Issues and Projects
- Idempotency: Commands query GitHub directly, ensuring they always reflect current state
- Multi-machine support: No local state means the plugin works identically across machines
- No sync issues: Local state could become stale; direct queries are always accurate
Other /re:* commands will query GitHub to discover the project rather than relying on cached references.
Command Execution:
- All operations should be non-interactive (use
--format jsonwhere available) - Parse JSON output using
jqor similar tools - Use
--owner [owner]for all project and field commands - Project number is extracted from JSON response during creation or listing
Error Handling:
- Exit gracefully on validation failures (steps 1-3)
- Continue on non-critical failures (field/view creation)
- Provide clear, actionable error messages
- Include fallback manual instructions when CLI lacks functionality
Testing Notes:
- Verified with gh CLI version 2.x on macOS
- Commands tested:
gh project list,gh project create,gh project field-list,gh project field-create - View creation is not supported via CLI; manual setup via web interface is required